Linux Shell 编程实例
Linux Shell 编程是自动化任务、系统管理和开发流程的重要工具,通过编写 Shell 脚本,用户可以简化重复性操作、提高工作效率,并实现复杂的系统管理功能,本文将通过几个典型实例,介绍 Shell 编程的核心概念与实际应用。

基础脚本:文件批量重命名
在文件管理中,批量重命名是一项常见需求,以下脚本实现了将当前目录下所有 .txt 文件扩展名改为 .md:
#!/bin/bash
for file in *.txt; do
mv "$file" "${file%.txt}.md"
done
echo "重命名完成!"
解析:
#!/bin/bash指定解释器为 Bash。for file in *.txt遍历所有.txt文件。${file%.txt}是参数替换语法,移除文件名中的.txt后缀。mv命令完成重命名操作。
运行脚本前需赋予执行权限:chmod +x rename.sh,然后通过 ./rename.sh 执行。
文本处理:日志分析
日志分析是系统运维的重要任务,以下脚本统计 Apache 访问日志中 IP 地址的访问次数:
#!/bin/bash
log_file="/var/log/apache2/access.log"
if [ ! -f "$log_file" ]; then
echo "日志文件不存在!"
exit 1
fi
echo "IP 访问统计:"
awk '{print $1}' "$log_file" | sort | uniq -c | sort -nr
解析:

-f检查文件是否存在。awk '{print $1}'提取每行的第一个字段(IP 地址)。sort | uniq -c统计重复次数,sort -nr按数值降序排列。
系统监控:磁盘空间检查
系统管理员需要定期监控磁盘空间,以下脚本检查磁盘使用率并警告超过 80% 的分区:
#!/bin/bash
threshold=80
df -h | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{print $5, $6}' | while read output; do
usage=$(echo $output | awk '{print $1}' | sed 's/%//')
partition=$(echo $output | awk '{print $2}')
if [ $usage -gt $threshold ]; then
echo "警告:分区 $usage% 已满!"
fi
done
解析:
df -h显示磁盘使用情况,grep过滤系统文件。sed 's/%//'移除百分比符号,便于数值比较。- 通过
if条件判断触发警告。
自动化备份:数据归档
定期备份是数据安全的关键,以下脚本将 /home/user/documents 目录压缩并备份到 /backup:
#!/bin/bash src_dir="/home/user/documents" backup_dir="/backup" timestamp=$(date +%Y%m%d_%H%M%S) backup_file="documents_backup_$timestamp.tar.gz" mkdir -p "$backup_dir" tar -czf "$backup_dir/$backup_file" "$src_dir" echo "备份完成:$backup_file"
解析:
date生成时间戳,确保备份文件名唯一。mkdir -p创建备份目录(若不存在)。tar -czf将目录压缩为.tar.gz文件。
交互式脚本:用户管理
通过交互式脚本,管理员可以简化用户创建流程:

#!/bin/bash
read -p "请输入用户名:" username
read -s -p "请输入密码:" password
echo
if id "$username" &>/dev/null; then
echo "用户已存在!"
else
useradd -m "$username" && echo "$password" | passwd "$username" --stdin
echo "用户 $username 创建成功!"
fi
解析:
read -p提示用户输入,read -s隐藏密码输入。id检查用户是否存在,useradd -m创建用户并创建家目录。passwd --stdin非交互式设置密码。
Shell 编程通过结合命令、变量、循环和条件判断,实现了从文件管理到系统监控的广泛功能,上述实例涵盖了基础语法、文本处理、系统管理和自动化任务,是 Shell 实践的典型场景,掌握这些技能,不仅能提升工作效率,还能为更复杂的运维开发奠定基础。


















