Shell脚本作为Linux运维工程师必须掌握的技能之一,能够通过编写Shell脚本来提升工作效率和减小出错率。下面我们来介绍几个实用的Shell脚本。
一、文件备份脚本
#!/bin/bash # 备份目录 backup_dir=/var/backup/ # 要备份的文件列表 files="/etc/passwd /etc/group /etc/shadow" # 备份文件名 backup_file="backup-$(date +%Y%m%d%H%M%S).tar.gz" # 备份命令 tar -zcvf ${backup_dir}${backup_file} ${files}
以上脚本将要备份的文件列表存放在一个变量中,将备份文件命名为当前时间,并将备份文件保存在/var/backup/目录下。
二、日志分析脚本
#!/bin/bash # 要分析的日志文件 logfile=/var/log/messages # 分析脚本 awk '/error/' ${logfile} > error.log awk '/warning/' ${logfile} > warning.log
以上脚本将/var/log/messages中包含error和warning的日志行分别提取到error.log和warning.log文件中。
三、查找并删除指定文件脚本
#!/bin/bash # 要查找和删除的目录 search_dir=/home/ # 要查找和删除的文件名 filename=temp # 是否确认删除 confirm=true # 查找命令 find ${search_dir} -name ${filename} -type f -print0 | while read -d $'\0' file do if [ ${confirm} = true ]; then echo "Delete file ${file}? (y/n)" read answer else answer=y fi if [ ${answer} = "y" ]; then rm -f ${file} echo "File ${file} deleted." fi done
以上脚本将搜索/home/目录下所有名为temp的文件,并提示用户确认是否删除。如果确认删除,则将文件删除。
四、文件上传脚本
#!/bin/bash # 要上传的文件 filename=test.txt # 上传地址 upload_url=http://example.com/upload/ # 上传命令 curl -F "file=@${filename}" ${upload_url}
以上脚本将test.txt文件上传到指定的上传地址。
五、CPU负载监控脚本
#!/bin/bash # CPU负载阈值 threshold=2 # 检查间隔 interval=5 # 监控命令 while true do load=$(uptime | awk '{print $NF}' | cut -d. -f1) if [ ${load} -ge ${threshold} ]; then echo "$(date) CPU load exceeded threshold ${threshold}: ${load}" alert-command fi sleep ${interval} done
以上脚本每隔5秒钟检查CPU负载情况,如果负载超过阈值2,则输出警告信息并执行警告命令。
六、TCP连接数监控脚本
#!/bin/bash # TCP连接数阈值 threshold=1000 # 检查间隔 interval=10 # 监控命令 while true do count=$(netstat -an | grep :80 | wc -l) if [ ${count} -ge ${threshold} ]; then echo "$(date) TCP connection count exceeded threshold ${threshold}: ${count}" alert-command fi sleep ${interval} done
以上脚本每隔10秒钟检查80端口的TCP连接数,如果超过阈值1000,则输出警告信息并执行警告命令。
七、磁盘使用情况监控脚本
#!/bin/bash # 磁盘使用率阈值 threshold=90 # 监控命令 while true do usage=$(df -h | grep /dev/sda1 | awk '{print $5}' | cut -d% -f1) if [ ${usage} -ge ${threshold} ]; then echo "$(date) Disk usage exceeded threshold ${threshold}: ${usage}%" alert-command fi sleep 300 done
以上脚本每隔5分钟检查/dev/sda1分区的磁盘使用率,如果超过阈值90,则输出警告信息并执行警告命令。