接下来是条件判断,也就是 if 语句。基本结构是 if [ 条件 ]; then ... fi,注意中括号里面两边都要有空格,这是 Shell 的语法规定,不加空格直接报错。判断数字大小用 -gt、-lt、-eq 这类运算符,比如 [ $age -gt 18 ] 表示 age 大于 18。判断字符串是否相等用 == ,判断文件是否存在用 -f,判断目录是否存在用 -d,这几个是最常用的。举个实际例子,你写一个脚本,开头先判断某个配置文件是否存在,不存在就提示用户并退出,这样比直接运行报一堆看不懂的错误要友好得多。实际写法大概是这样:if [ ! -f "/etc/myapp.conf" ]; then echo "配置文件不存在,请检查"; exit 1; fi,简单几行就能让脚本健壮很多。
循环是 Shell 脚本里真正能帮你省大量时间的部分。for 循环和 while 循环是最常用的两种。for 循环适合遍历已知的列表,比如你有一批服务器 IP,想对每台都执行同样的命令,写个 for ip in 192.168.1.1 192.168.1.2 192.168.1.3; do ssh $ip "df -h"; done,一行搞定。while 循环适合需要持续监控某个状态的场景,比如每隔5秒检查一次某个进程是否还在运行,不在了就发告警。有一个小技巧是用 for i in $(seq 1 10) 来生成从1到10的数字序列,比手写1到10省事很多,在批量重命名文件或者批量创建测试数据的时候特别好用。
最后说一个容易被忽视的习惯:每个脚本开头写上 #!/bin/bash,明确指定解释器;用 set -e 让脚本在任意命令出错时立即停止,防止错误叠加;重要操作前加上 echo 打印日志,方便排查问题。这几个习惯不是玄学,是真实生产环境里磨出来的经验。Shell 脚本学起来不难,难的是把它写得可靠、可维护,多写多练,遇到问题去 man 手册里找答案,进步会很快的。