Linux Shell 脚本编程入门:变量/条件判断/循环

小飞兽 Shell 107 次阅读 2026-07-29

一、引言

Shell 是 Linux/Unix 系统中最重要的脚本语言之一,无论是系统管理还是自动化运维,Shell 脚本都能极大提升工作效率。本教程将从变量开始,逐步讲解条件判断和循环语句,帮助零基础读者快速掌握 Shell 编程的核心基础。

二、变量定义与使用

Shell 变量无需声明类型,直接通过 = 赋值,注意等号两边不能有空格。

#!/bin/bash

变量定义与使用示例

定义字符串变量

name="Shell教程"

定义数字变量

version=100

定义空变量

empty_var=""

输出变量值,使用 $ 符号取值

echo "课程名称:$name" echo "版本号:$version" echo "空变量内容:[$empty_var]"

变量拼接

greeting="欢迎学习${name},当前版本:${version}" echo "$greeting"

使用 read 读取用户输入

echo "请输入您的姓名:" read username echo "您好,$username!"

只读变量,不能修改和删除

readonly PI=3.14159 echo "圆周率:$PI"

PI=3.14 # 这行会报错:cannot modify readonly

删除变量(普通变量可删除)

temp="临时变量" echo "temp = $temp" unset temp echo "unset 后 temp = $temp"

三、条件判断语句

Shell 中的条件判断使用 test 命令或 [ ] 语法,注意括号内侧需要加空格。

#!/bin/bash

条件判断示例

1. 文件测试运算符

file="/etc/passwd" if [ -f "$file" ]; then echo "$file 是一个普通文件" fi

if [ -d "/tmp" ]; then
echo "/tmp 是一个目录"
fi

if [ -r "$file" ]; then
echo "$file 可读"
fi

2. 字符串比较

str1="hello" str2="world" if [ "$str1" = "$str2" ]; then echo "字符串相等" else echo "字符串不相等" fi

判断字符串是否为空

str="" if [ -z "$str" ]; then echo "字符串为空" fi

if [ -n "$str1" ]; then
echo "字符串非空"
fi

3. 数字比较

num1=10 num2=20 if [ $num1 -eq $num2 ]; then echo "$num1 等于 $num2" elif [ $num1 -lt $num2 ]; then echo "$num1 小于 $num2" else echo "$num1 大于 $num2" fi

4. 逻辑运算符

age=25 if [ $age -ge 18 ] && [ $age -le 60 ]; then echo "年龄 $age 在工作年龄段内" fi

5. case 语句(多分支)

grade="B" case $grade in "A") echo "优秀" ;; "B") echo "良好" ;; "C") echo "及格" ;; *) echo "未知等级" ;; esac

四、循环结构

Shell 支持 forwhileuntil 三种循环结构。

#!/bin/bash

循环结构示例

1. for 循环 - 遍历列表

echo "=== 遍历数字列表 ===" for i in 1 2 3 4 5; do echo "第 $i 次循环" done

2. for 循环 - 遍历数组

echo "=== 遍历数组 ===" fruits=("苹果" "香蕉" "橘子" "葡萄") for fruit in "${fruits[@]}"; do echo "水果:$fruit" done

3. for 循环 - C语言风格

echo "=== C语言风格 for 循环 ===" for ((i=1; i<=5; i++)); do echo "计数:$i" done

4. for 循环 - 遍历文件

echo "=== 遍历当前目录下的 txt 文件 ===" for file in *.txt 2>/dev/null; do if [ -f "$file" ]; then echo "找到文件:$file" fi done

5. while 循环

echo "=== while 循环 ===" count=1 while [ $count -le 5 ]; do echo "while 计数:$count" ((count++)) done

6. until 循环(条件为假时执行)

echo "=== until 循环 ===" num=1 until [ $num -gt 3 ]; do echo "until 计数:$num" ((num++)) done

7. 循环控制:break 和 continue

echo "=== break 和 continue 示例 ===" for i in {1..10}; do if [ $i -eq 3 ]; then echo "跳过数字 3" continue fi if [ $i -ge 7 ]; then echo "遇到数字 $i,退出循环" break fi echo "处理数字:$i" done

五、常见问题(FAQ)

Q1: 变量赋值时显示 "command not found"?

常见原因是等号两侧加了空格。正确写法是 var=value,错误写法是 var = value(这会被解释成运行名为 var 的命令)。

Q2: 字符串比较时结果不对?

变量最好用双引号包裹,如 [ "$str1" = "$str2" ]。如果变量为空或包含空格,不加引号会导致语法错误或比较结果异常。

Q3: 循环中如何处理包含空格的字符串?

遍历时将变量用双引号包裹:for item in "${array[@]}"。这样可以正确处理包含空格的元素,而不会把它们拆分成多个词。

Q4: 如何让脚本支持中文?

在脚本开头添加 #!/bin/bashexport LANG=zh_CN.UTF-8,确保系统支持 UTF-8 编码。

六、延伸阅读