【Linux】Shell编程

在这里插入图片描述

个人主页:Guiat
归属专栏:Linux

在这里插入图片描述

正文

1. Shell编程基础概念

1.1 Shell环境与解释器

# 查看系统可用Shell
cat /etc/shells

# 指定解释器(脚本首行)
#!/bin/bash      # Bash解释器
#!/usr/bin/env bash # 环境变量定位

1.2 脚本执行方式

chmod +x script.sh  # 添加执行权限
./script.sh         # 直接执行
bash script.sh      # 指定解释器执行
source script.sh    # 当前Shell环境执行

2. 核心语法要素

2.1 变量操作

name="value"      # 定义变量(无空格)
echo ${name}      # 使用变量
readonly PI=3.14  # 只读变量
unset name        # 删除变量

# 特殊变量
$0 脚本名称
$1-$9 位置参数
$# 参数个数
$*/$@ 所有参数
$? 上条命令返回值

2.2 字符串处理

str="Hello World"
echo ${#str}         # 长度计算 → 11
echo ${str:0:5}      # 子串截取 → Hello
echo ${str/World/Shell} # 替换操作 → Hello Shell

2.3 数值运算

# 整数运算(三种方式)
echo $((10 + 5))     # 算术扩展 → 15
echo $[20 / 4]       # 方括号语法 → 5
let result=8*3       # let命令 → 24

# 浮点运算(需bc工具)
echo "scale=2; 10/3" | bc3.33

3. 流程控制结构

3.1 条件判断

true
false
开始
条件判断
执行代码块
else分支
结束

3.1.1 if语句

if [[ -f "file.txt" ]]; then
    echo "文件存在"
elif [[ -d "dir" ]]; then
    echo "目录存在"
else
    echo "路径无效"
fi

3.1.2 case语句

case $1 in
    start)
        echo "启动服务"
        ;;
    stop|restart)
        echo "操作: $1"
        ;;
    *)
        echo "无效指令"
        ;;
esac

3.2 循环结构

3.2.1 for循环

# 列表迭代
for i in {1..5}; do
    echo "Count: $i"
done

# C风格语法
for ((i=0; i<3; i++)); do
    echo "Index: $i"
done

3.2.2 while循环

count=3
while [[ $count -gt 0 ]]; do
    echo "倒计时: $count"
    ((count--))
done

3.2.3 until循环

num=1
until [[ $num -gt 5 ]]; do
    echo "数值: $num"
    ((num++))
done

4. 函数与模块化

4.1 函数定义

function calc_sum {
    local a=$1  # 局部变量
    local b=$2
    echo $((a + b))
}

# 调用函数
result=$(calc_sum 15 25)
echo "结果: $result"  # 输出 40

4.2 参数传递

#!/bin/bash
# 示例:script.sh arg1 arg2

echo "脚本名: $0"
echo "首个参数: ${1:-默认值}"  # 参数缺省值
shift  # 参数左移
echo "新首个参数: $1"

5. 高级处理技巧

5.1 正则表达式匹配

text="ID: 12345, Date: 2023-08-15"
if [[ $text =~ [0-9]{5} ]]; then
    echo "找到ID: ${BASH_REMATCH[0]}"  # 输出 12345
fi

5.2 信号处理

trap 'cleanup; exit 1' SIGINT SIGTERM

cleanup() {
    echo "捕获中断信号,执行清理..."
    rm -f tempfile.txt
}

6. 调试与优化

6.1 调试模式

#!/bin/bash -x   # 启用跟踪调试
set -e           # 错误自动退出
set -o pipefail  # 管道错误捕获

6.2 性能分析

time ./script.sh  # 统计执行时间

# 代码片段耗时检测
start=$(date +%s%N)
# 待测代码
duration=$((($(date +%s%N) - start)/1000000))
echo "耗时: ${duration}ms"

7. 实用代码示例库

7.1 文件批量处理

# 重命名所有.txt文件为.bak
for file in *.txt; do
    mv "$file" "${file%.txt}.bak"
done

7.2 日志分析

# 统计访问日志TOP10 IP
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -n10

8. 常见问题解决方案

8.1 错误对照表

错误现象解决方案
命令未找到检查PATH变量或使用绝对路径
权限拒绝chmod +x 或 sudo 执行
语法错误: unexpected token检查空格使用和符号转义

8.2 编码规范建议

  1. 使用双引号包裹变量 "$var"
  2. 避免使用全大写变量名(保留给系统变量)
  3. 使用 [[ ]] 代替 [ ] 进行条件测试
  4. 复杂脚本添加注释头部(作者/功能/版本)

9. 学习路径推荐

  1. 掌握30个核心命令(grep/sed/awk等)
  2. 理解I/O重定向与管道机制
  3. 练习编写系统管理脚本
  4. 学习ShellCheck进行代码检查
  5. 研究开源项目中的Shell实践

结语
感谢您的阅读!期待您的一键三连!欢迎指正!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Guiat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值