Shell脚本是Linux和Unix系统中非常实用的自动化工具,它通过把一系列系统命令按照逻辑顺序组合起来,形成可重复执行的脚本文件,能够大幅减少人工重复操作的成本,提升任务执行的准确性和效率。

Shell脚本基础准备
要编写Shell脚本,首先需要了解脚本的基本结构。最常见的Shell是bash,我们编写的脚本通常以#!/bin/bash作为开头,这行内容叫做shebang,用来指定脚本执行时使用的解释器。
一个简单的Hello World脚本示例如下:
#!/bin/bash # 这是单行注释,用来说明脚本功能 echo "Hello, Shell Script"
编写完脚本后,需要给脚本添加可执行权限才能运行,使用chmod +x 脚本文件名命令即可完成权限配置,之后通过./脚本文件名的方式执行脚本。
常见自动化任务实现
1. 自动备份文件
日常工作中经常需要定期备份重要文件,用Shell脚本可以轻松实现这个需求。下面的脚本会把指定目录下的文件打包压缩到备份目录,并且以当前日期命名备份文件:
#!/bin/bash # 定义源目录和备份目录 source_dir="/home/user/documents" backup_dir="/home/user/backups" # 获取当前日期,格式为YYYYMMDD current_date=$(date +%Y%m%d) # 创建备份目录(如果不存在) mkdir -p $backup_dir # 打包压缩源目录文件 tar -czf $backup_dir/backup_$current_date.tar.gz $source_dir # 输出备份完成提示 echo "文件备份完成,备份文件为:$backup_dir/backup_$current_date.tar.gz"
2. 自动清理过期日志
服务器上的日志文件会不断积累占用磁盘空间,下面的脚本可以自动删除指定目录下超过7天的日志文件:
#!/bin/bash # 定义日志目录 log_dir="/var/log/app" # 查找并删除7天前的.log文件 find $log_dir -name "*.log" -mtime +7 -delete # 记录清理操作到系统日志 echo "$(date) 清理了$log_dir下7天前的日志文件" >> /var/log/clean_log.log
3. 批量执行系统命令
如果需要在多台服务器上执行相同的命令,或者批量处理多个文件,也可以用Shell脚本实现。下面的脚本会批量检查多个服务器的连通性:
#!/bin/bash
# 定义服务器IP列表
server_list=("192.168.0.1" "192.168.0.2" "127.0.0.1")
# 遍历列表逐个检查连通性
for server in ${server_list[@]}; do
ping -c 3 $server > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "$server 连通正常"
else
echo "$server 连通异常"
fi
done
结合定时任务实现全自动执行
如果希望脚本不需要手动触发,而是按照固定时间自动执行,可以结合crontab定时任务工具使用。首先通过crontab -e命令打开定时任务编辑界面,然后添加对应的任务规则。
比如希望每天凌晨2点执行上面的文件备份脚本,可以添加如下规则:
0 2 * * * /home/user/backup_script.sh
crontab的时间规则格式为分 时 日 月 周 命令,上面的规则中0代表0分,2代表2点,后面的星号代表每天每月每周都执行。
脚本调试与注意事项
编写脚本时如果遇到执行异常,可以通过bash -x 脚本文件名的方式开启调试模式,脚本执行时会输出每一条命令的执行过程,方便定位问题。
另外需要注意,脚本中如果涉及文件路径,尽量使用绝对路径,避免因为执行脚本时的工作目录不同导致路径错误。如果脚本需要操作需要root权限的文件或目录,执行时需要使用sudo命令,或者把脚本配置到root用户的crontab任务中。