Shell脚本编程入门:从基础语法到流程控制
引言
Shell脚本是Linux系统管理和自动化任务中不可或缺的强大工具。无论是日常系统维护、批量处理文件,还是自动化部署,掌握Shell脚本编程都能极大提高工作效率。本文将从零开始,系统介绍Shell脚本的基本语法和核心概念,为初学者提供一个全面而实用的学习指南。
一、Shell脚本的创建与执行
1. 脚本文件基础
Shell脚本通常使用.sh
作为扩展名,文件开头必须指定解释器:
#!/bin/bash
这行特殊的注释(shebang)告诉系统使用Bash解释器来执行此脚本。
2. 执行权限与运行方式
脚本需要执行权限才能直接运行:
chmod +x script.sh # 添加执行权限
./script.sh # 通过路径执行
也可以不使用执行权限,直接通过解释器运行:
bash script.sh
二、变量:存储数据的容器
1. 变量声明与使用
name="Gero" # 声明变量(等号两边不能有空格)
echo $name # 使用变量:输出 Gero
echo ${name} # 推荐使用{}的格式,更清晰
2. 特殊变量类型
readonly PI=3.14 # 只读变量,不可修改
unset name # 删除变量(对只读变量无效)
三、字符串操作
Shell中字符串处理非常灵活:
str="Hello World"
echo ${#str} # 输出字符串长度:11
echo ${str:6} # 从第6个字符开始截取:World
echo ${str:6:3} # 从第6个字符截取3个字符:Wor
四、参数传递:让脚本更灵活
Shell脚本可以接受外部参数:
#!/bin/bash
echo "脚本名称:$0"
echo "第一个参数:$1"
echo "参数个数:$#"
echo "所有参数:$*"
特殊参数变量:
$#
:参数个数$*
/$@
:所有参数$?
:上条命令退出状态$$
:当前进程ID
五、运算符:数学与逻辑运算
1. 算术运算的三种方式
# 使用expr
val=`expr 2 + 2` # 注意运算符两侧空格# 使用双括号
((count++)) # 自增运算
val=$((1 + 2)) # 赋值运算# 使用方括号
val=$[1 + 2] # 简单算术运算
2. 关系与逻辑运算符
# 关系比较
[ $a -eq $b ] # 等于
[ $a -ne $b ] # 不等于
[ $a -gt $b ] # 大于# 逻辑运算
[ condition1 -a condition2 ] # 且
[ condition1 -o condition2 ] # 或
3. 文件测试运算符
[ -f "/path/to/file" ] # 是否存在且为普通文件
[ -d "/path/to/dir" ] # 是否存在且为目录
[ -x "/path/to/script" ] # 是否存在且可执行
六、流程控制:程序逻辑的骨架
1. 条件判断:if-else结构
# 单分支判断
if [ $age -gt 18 ]; thenecho "成年人"
fi# 双分支判断
if [ -f "$file" ]; thenecho "文件存在"
elseecho "文件不存在"
fi# 多分支判断
if [ $score -ge 90 ]; thenecho "优秀"
elif [ $score -ge 60 ]; thenecho "及格"
elseecho "不及格"
fi
2. 多条件选择:case语句
case $fruit in"apple")echo "这是苹果";;"banana")echo "这是香蕉";;*)echo "未知水果";;
esac
3. 循环结构:for与while
# for循环:数值方式
for ((i=1; i<=5; i++))
doecho "第$i次循环"
done# for循环:遍历列表
for color in red green blue
doecho "颜色: $color"
done# while循环
count=1
while [ $count -le 3 ]
doecho "计数: $count"((count++))
done
七、实战案例:一个简单的系统监控脚本
#!/bin/bash
# 系统状态监控脚本echo "=== 系统状态报告 ==="
echo "报告生成时间: $(date)"
echo "当前用户: $(whoami)"
echo "系统运行时间: $(uptime)"
echo "内存使用情况:"
free -h
echo "磁盘使用情况:"
df -h
总结
Shell脚本编程是每个Linux用户和系统管理员必备的技能。通过本文的学习,您已经掌握了:
- 脚本基础:创建、权限管理和执行方式
- 变量使用:声明、引用和删除变量
- 字符串操作:长度获取、子串提取等常用操作
- 参数传递:使脚本能够接受外部输入
- 运算符:算术、关系、逻辑和文件测试运算符
- 流程控制:条件判断和循环结构的灵活运用