Linux Shell编程实例:从基础到实用
Linux Shell编程是系统管理者和开发者的必备技能,它通过脚本自动化重复任务,提高工作效率,本文将通过多个实例,展示Shell编程的核心概念,包括变量、条件判断、循环、函数及文件操作,帮助读者掌握实用技巧。

基础脚本结构与变量定义
Shell脚本以#!/bin/bash开头,指定解释器,变量无需声明类型,直接赋值即可。
#!/bin/bash name="Linux" # 字符串变量 version=5.15 # 数值变量 echo "操作系统: $name, 版本: $version" # 使用$引用变量
这里,name和version分别是字符串和数值变量,通过符号在输出时调用,Shell支持变量替换,如${name}编程可拼接字符串。
条件判断与流程控制
条件判断是脚本的逻辑核心。if语句结合test或[]实现分支逻辑:
#!/bin/bash
score=85
if [ $score -ge 90 ]; then
echo "优秀"
elif [ $score -ge 60 ]; then
echo "及格"
else
echo "不及格"
fi
-ge表示“大于等于”,-lt表示“小于”,文件测试也是常见场景,如[ -f file.txt ]判断文件是否存在。
循环语句:遍历与重复操作
循环用于处理批量任务。for循环适合遍历列表:
#!/bin/bash
for file in *.txt; do
echo "处理文件: $file"
# 此处可添加文件处理逻辑,如移动、备份等
done
while循环则依赖条件控制:

#!/bin/bash
count=1
while [ $count -le 5 ]; do
echo "计数: $count"
((count++)) # 自增操作
done
until循环与while相反,条件为假时执行。
函数:模块化脚本设计
函数封装可复用代码,提升脚本可读性:
#!/bin/bash
greet() {
echo "你好, $1!" # $1为第一个参数
}
greet "用户"
greet "管理员"
函数通过$1、$2等接收参数,$0为脚本名。return用于返回状态码(0-255)。
文件操作与文本处理
Shell擅长文本处理。grep过滤行,awk格式化输出,sed编辑文本:
#!/bin/bash
# 统计日志文件中的错误次数
errors=$(grep -i "error" app.log | wc -l)
echo "错误数量: $errors"
# 提取IP地址
awk '{print $1}' access.log | sort | uniq -c
wc -l统计行数,sort排序,uniq -c去重并计数。
实用脚本示例:备份工具
结合上述知识,编写一个自动备份脚本:

#!/bin/bash SOURCE="/var/www/html" BACKUP_DIR="/backup" DATE=$(date +%Y%m%d) BACKUP_FILE="website_$DATE.tar.gz" # 检查备份目录是否存在 [ ! -d "$BACKUP_DIR" ] && mkdir -p "$BACKUP_DIR" # 执行备份 tar -czf "$BACKUP_DIR/$BACKUP_FILE" "$SOURCE" echo "备份完成: $BACKUP_FILE" # 清理7天前的备份 find "$BACKUP_DIR" -name "website_*.tar.gz" -mtime +7 -delete
脚本通过tar压缩文件,find清理旧备份,实现自动化维护。
调试与优化
调试脚本时,可使用set -x打印执行过程:
#!/bin/bash set -x # 启用调试模式 var="test" echo $var set +x # 关闭调试模式
优化建议:避免硬编码路径,使用$(command)代替反引号,添加错误检查(如if [ $? -ne 0 ])。
Shell编程是Linux自动化的基石,通过变量、循环、函数及文本处理等工具,可高效管理任务,本文实例覆盖了从基础到进阶的需求,读者可根据实际场景扩展应用,如结合cron定时执行脚本,进一步提升工作效率。




















