Linux Shell 脚本编程入门:变量/条件判断/循环
一、引言
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 支持 for、while、until 三种循环结构。
#!/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/bash 和 export LANG=zh_CN.UTF-8,确保系统支持 UTF-8 编码。
六、延伸阅读
- Bash 常用命令与管道操作:掌握 grep、sed、awk 等文本处理工具
- Linux 定时任务完全指南:学习 crontab 配置实现自动化
- Shell 脚本函数与参数传递:深入学习函数的定义与使用