跳至正文

Linux Shell脚本进阶

在掌握了 Linux 基础命令与简单脚本之后,很多人会发现,真正的难点并不在于语法本身,而在于如何把零散的命令与逻辑组织成一个高效、健壮、可维护的脚本。这就是 “进阶” 阶段的价值所在。它不仅要求我们理解 ifforwhile 这些基本结构,更需要思考变量作用域、异常处理、调试方法,以及如何写出能适应复杂环境的自动化工具。本文将从实用的角度出发,带你一步步走进 Shell 脚本编程的更高层次。

基本结构

if 语句

在 Shell 脚本中,if 是控制程序逻辑的核心语句。它可以根据条件的真假来决定代码的执行路径。基本结构如下:

if [ 条件判断式 ]; then
    命令1
    命令2
elif [ 另一条件 ]; then
    命令3
else
    命令4
fi

要点

条件判断式

  • 使用方括号 [ ] 包裹,注意左右要有空格。
  • 常见的条件包括:字符串比较、数字比较、文件测试。

常用比较方式

字符串比较
if [ "$a" = "$b" ]; then
    echo "字符串相等"
fi
整数比较
if [ "$num" -gt 10 ]; then
    echo "大于10"
fi

-eq 等于,-ne 不等于,-lt 小于,-ge 大于等于)

文件测试(常用)
if [ -f "/etc/passwd" ]; then
    echo "文件存在"
fi

-f 普通文件,-d 目录,-r 可读,-w 可写,-x 可执行)

多条件组合
if [ "$num" -gt 0 ] && [ "$num" -lt 100 ]; then
    echo "在0到100之间"
fi

-a 表示 -o 表示 ,也可以用 &&||

简写

[ -d /tmp ] && echo "目录存在" || echo "目录不存在"

while 循环

while 循环常用于在条件满足时,反复执行一段代码,直到条件不再成立为止。基本结构如下:

while [ 条件判断式 ]; do
    命令1
    命令2
done

要点

条件判断式

  • 每次循环开始前都会先判断一次条件。
  • 条件为真 → 执行循环体;条件为假 → 退出循环。
计数器循环
count=1
while [ $count -le 5 ]; do
    echo "第 $count 次循环"
    count=$((count+1))
done

输出 1 到 5。

读取文件内容
while read line; do
    echo "读到: $line"
done < /etc/passwd

按行读取 /etc/passwd 文件。

无限循环
while true; do
    echo "一直循环,按 Ctrl+C 退出"
    sleep 1
done

常用于守护进程或监控脚本。

与 until 的对比

while:条件为 时循环。

until:条件为 时循环

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

for 循环

在 Shell 脚本中,for 是最常用的循环结构之一。它通常用于 遍历一组值按序执行一段逻辑

用法

遍历列表
for name in Tom Jerry Alice; do
    echo "Hello, $name!"
done

依次输出 Hello, Tom!Hello, Jerry!Hello, Alice!

使用通配符遍历文件
for file in *.txt; do
    echo "发现文件: $file"
done

遍历当前目录下所有 .txt 文件。

C 风格的 for 循环
for ((i=1; i<=5; i++)); do
    echo "第 $i 次循环"
done

输出 1 到 5。

与命令结合

for 可以直接用命令输出结果作为循环对象:

for user in $(cut -d: -f1 /etc/passwd); do
    echo "系统用户: $user"
done

遍历 /etc/passwd 中的所有用户名。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注