前言:为什么说Shell是程序员的瑞士军刀?(真香警告!)
各位脚本爱好者注意了!!今天咱们要聊的可是Linux系统里的"万金油"技能——Shell脚本编程。说个真实案例:去年我们公司服务器被挖矿病毒入侵,全靠一段15行的Shell脚本快速定位异常进程,直接挽回百万损失!(后怕.jpg)这玩意学好了,绝对能让你的运维效率翻倍!
一、文件操作篇(新手村必备)
案例1:批量修改文件后缀名(拯救强迫症患者)
#!/bin/bash
# 把当前目录所有.txt改成.md
for file in *.txt; do
mv "$file" "${file%.txt}.md"
done
重点解析:${变量%模式}
语法是字符串裁剪神器!!(必看!!)想批量改日期后缀?把.txt
换成-$(date +%Y%m%d)
就行~
案例2:自动清理30天前的日志文件(系统管理员救命稻草)
find /var/log -name "*.log" -type f -mtime +30 -exec rm {} \;
避坑指南:测试时一定先换成-ls
代替rm
!!(血泪教训)-mtime +30
表示30天前的文件,-type f
确保只删文件不删目录
二、系统监控篇(运维工程师直呼内行)
案例3:CPU使用率监控脚本(比任务管理器更直观)
#!/bin/bash
threshold=80
while true; do
usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
if (( $(echo "$usage > $threshold" | bc -l) )); then
echo "[警报!!] CPU使用率突破${threshold}%:当前值 ${usage}%" | mail -s "CPU告警" admin@example.com
fi
sleep 60
done
黑科技:top -bn1
是无界面模式,awk
提取关键数据,bc
处理浮点数比较(这个组合拳打得太漂亮了!)
案例4:磁盘空间巡检脚本(再也不怕半夜告警)
#!/bin/bash
df -h | awk 'NR>1 {if ($5 > "90%") print "分区",$1,"使用率",$5}'
扩展玩法:加上>> /var/log/disk_check.log
就能生成巡检日志,搭配crontab实现定时巡检
三、数据处理篇(文本处理天花板)
案例5:日志关键词统计(快速定位系统异常)
grep -oE 'ERROR|WARN' /var/log/app.log | sort | uniq -c
效果演示:
23 ERROR
45 WARN
高阶技巧:配合watch -n 5
命令可以实现实时监控,排查偶发问题神器!
案例6:CSV文件格式转换(Excel党看过来)
awk -F',' '{print $1 "\t" $3 "\t" $NF}' data.csv > formatted.tsv
参数解析:-F','
指定分隔符,$NF
表示最后一列,想做数据清洗?这个命令能省你半小时!
四、网络操作篇(爬虫工程师都点赞)
案例7:网站可用性监控(比付费工具还好用)
#!/bin/bash
url="https://example.com"
if curl --output /dev/null --silent --head --fail "$url"; then
echo "$url 存活!"
else
echo "[紧急] $url 无法访问!" | telegram-send --stdin
fi
升级方案:加上-m 5
限制超时时间,再搭配企业微信机器人API,秒变专业监控系统
案例8:批量下载图片资源(新媒体运营狂喜)
wget -i url_list.txt -P ./images -nc
参数详解:-i
指定URL列表文件,-P
设置保存目录,-nc
防止重复下载(这个组合我给满分!)
五、自动化篇(解放双手神器)
案例9:SSH自动登录(告别每次输密码)
#!/bin/bash
/usr/bin/expect << EOF
spawn ssh user@host
expect "password:"
send "your_password\r"
interact
EOF
安全警告:建议使用ssh-key免密登录更安全!!(重点加粗)这个方案适合临时测试环境
案例10:自动提交Git代码(懒人专属)
#!/bin/bash
git add .
git commit -m "自动提交:$(date +'%Y-%m-%d %H:%M:%S')"
git push origin master
实用技巧:放到post-commit
钩子中,实现提交后自动推送(适合个人项目)
避坑指南:Shell脚本五大常见翻车现场(含救命方案)
-
变量未引用的空格灾难:
mv $file $file.bak
→ 遇到带空格文件名直接扑街!必须加双引号:mv "$file" "$file.bak"
-
权限不足的玄学问题:记住
chmod +x script.sh
!!(新人必踩的坑) -
换行符引发的血案:Windows编辑的脚本在Linux运行报错?赶紧
dos2unix
处理! -
环境变量找不到:在crontab中运行时,PATH变量可能不全,脚本开头明确定义PATH更保险
-
管道命令的静默失败:记得加
set -eo pipefail
让脚本遇到错误立即退出
终极武器:Shell调试大法(老司机秘籍)
bash -x script.sh
开启执行追踪模式trap 'echo "出错在行 $LINENO"' ERR
自动捕获错误位置echo "调试信息" >&2
把调试信息输出到标准错误- 在VSCode里装ShellCheck插件,实时语法检查(真香!)
结语:从脚本小子到系统大师
看完这10个典型案例是不是觉得Shell脚本也没那么难?(其实还有90个案例在我的GitHub仓库)记住:最好的学习方法就是动手实践!遇到问题别慌,多用man
命令查文档,你也能写出像这样的骚操作:
# 一行命令统计最常使用的10个命令
history | awk '{CMD[$2]++;count++;} END {for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10
(这个神级命令建议保存到备忘录!)下期预告:《Shell脚本性能优化:让你的脚本快10倍的秘诀》,关注不迷路~