文章目录
一、为什么要学Shell脚本?(新手必看指南)
各位老铁们!今天咱们来聊聊这个服务器运维领域的"瑞士军刀"——Shell脚本编程(敲黑板!!!)。很多刚接触Linux的小伙伴都会有这样的困惑:图形界面操作不香吗?为什么要学这种黑乎乎的命令行脚本?
(偷偷告诉你)当你在凌晨3点被报警短信吵醒,需要同时给100台服务器打补丁的时候;当你每天要重复处理500个日志文件的时候;当你要在1分钟内完成系统健康检查的时候… 你就会明白Shell脚本到底有多香!
二、Shell脚本快速上手指南 🚀
2.1 环境准备(超简单版)
掏出你的Linux/Mac电脑(Windows同学可以用WSL),打开终端输入:
#!/bin/bash
echo "Hello, Shell World!" # 人生第一个脚本
保存为hello.sh,然后chmod +x hello.sh
给执行权限,最后./hello.sh
见证奇迹!
2.2 必须掌握的5大核心语法
- 变量操作:
name="张三"
(注意等号两边不能有空格!) - 条件判断:
if [ $age -gt 18 ]; then
echo "成年了"
else
echo "未成年"
fi
- 循环控制:
for i in {1..5}
do
echo "第$i次循环"
done
- 函数定义:
function greet() {
echo "你好,$1!"
}
greet "王师傅"
- 文件操作:
# 查找修改时间在7天前的日志文件
find /var/log -name "*.log" -mtime +7
三、实战案例精选(建议收藏反复练习)💻
案例17:服务器健康检查脚本
#!/bin/bash
# 获取系统负载
load=$(uptime | awk -F 'load average:' '{print $2}')
# 检查磁盘使用率
disk_usage=$(df -h | grep '/dev/sda1' | awk '{print $5}')
# 内存使用情况
free_mem=$(free -m | awk '/Mem/{print $4}')
echo "系统负载: $load"
echo "磁盘使用率: $disk_usage"
echo "剩余内存: ${free_mem}MB"
案例42:自动备份数据库(生产环境验证版)
#!/bin/bash
backup_dir="/data/backup/$(date +%Y%m%d)"
mkdir -p $backup_dir
mysqldump -uroot -p'password' mydb > ${backup_dir}/mydb.sql
# 保留最近7天备份
find /data/backup/ -type d -mtime +7 | xargs rm -rf
案例89:日志分析神器(可视化结果)
#!/bin/bash
# 统计Nginx日志状态码
awk '{print $9}' access.log | sort | uniq -c | sort -rn
# 提取访问量TOP10的IP
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10
四、避坑指南(血泪经验总结)⚠️
- 空格敏感症:
[ $a == $b ]
每个空格都不能少!建议用[[ ]]
代替 - 变量引号陷阱:处理带空格的字符串必须加双引号
- 路径问题:脚本中用绝对路径最安全
- 权限管理:
chmod
设置要合理,生产环境别用777! - 调试技巧:用
set -x
开启调试模式,set +x
关闭
五、进阶学习路线图 🎯
- 正则表达式:
grep/sed/awk
三剑客必须精通 - 信号处理:
trap
命令处理中断信号 - 并发控制:
&
和wait
实现多进程 - 安全编程:
set -euo pipefail
防御式编程 - 性能优化:避免不必要的子进程创建
(超级重要)最后送大家一句话:Shell脚本不是用来写复杂业务的,而是用来做自动化粘合剂的!当脚本超过200行时,就该考虑换Python了~
附:推荐学习资源
- 《Linux命令行与Shell脚本编程大全》(圣经级教材)
- explainShell.com(命令解析神器)
- ShellCheck在线检查工具(语法纠错必备)
- GitHub热门仓库:awesome-shell(精品脚本合集)
看完这篇文章是不是跃跃欲试了?赶紧打开终端,从写一个自动清理临时文件的脚本开始吧!遇到问题欢迎在评论区交流讨论~(记得三连哦)