Shell 脚本入门:从第一个脚本到自动化运维
对于刚接触 Linux 的开发者来说,Shell 脚本往往是第一件趁手的自动化工具:它不需要编译,不依赖框架,几行命令就能把重复的手工操作变成可重复执行的程序。本文从第一个脚本写起,聊聊变量、判断、循环、函数这些基本功,再落到备份、巡检这类真实的运维场景。
一、写出第一个脚本
新建文件 hello.sh,第一行写上 #!/bin/bash,这一行叫作 shebang,告诉系统用哪个解释器来执行脚本。接着写一行 echo "Hello, Shell!"。保存后执行 chmod +x hello.sh 赋予执行权限,再用 ./hello.sh 运行。如果直接写 bash hello.sh 也能运行,但少了可执行权限这一步,脚本就不像一个真正的命令。建议从一开始就养成加 shebang、加执行权限的习惯。
二、变量与参数:先理解再使用
Shell 变量赋值时等号两边不能有空格,写成 name="world" 才对,写成 name = "world" 会被当成命令。引用变量用 $name,命令的返回值用 $?,脚本参数用 $1、$2,参数个数用 $#。一个容易踩的坑是忘记加引号:写 "$name" 能防止空格把值拆散,而不加引号的 $name 在文件名带空格时常常出错。需要命令输出时,用 $(date +%F) 这样的形式,比反引号更清晰,也更容易嵌套。
三、判断、循环与函数
if 语句配合 test 或双方括号可以做条件判断,例如判断文件是否存在:if [ -f "$file" ]; then echo "文件存在"; fi。for 循环适合批量处理文件,while 循环适合按行读文件。把重复的逻辑抽成函数,函数内部用 local 声明局部变量,避免污染全局名字空间。写脚本时多用 set -euo pipefail:遇到错误立即退出、未定义变量报错、管道中任何一段失败都算失败。这三行防御性写法,是很多线上事故的廉价保险。
四、落到自动化运维:备份与巡检
一个典型的备份脚本只有十几行:定义备份目录和日期变量,用 tar 打包需要备份的目录,压缩后按日期命名,再删除七天前的旧备份,最后把结果写进日志文件。巡检脚本则可以定时检查磁盘使用率、服务进程和关键端口,发现异常就输出告警行,配合日志轮转,值班人员每天只要扫一眼日志。把这些脚本放进 crontab,就能每天凌晨自动执行,例如 0 2 * * * /opt/scripts/backup.sh。写定时任务时一定要用绝对路径,并在脚本开头显式设置 PATH,因为 cron 环境里的变量比交互式终端少得多。
五、新手最容易踩的五个坑
第一,等号两边加空格;第二,变量引用不加引号;第三,在 Windows 下编辑脚本后直接上传,行尾的回车符会让命令找不到;第四,rm -rf 后面跟了空变量,危险极高,删除前务必做非空校验;第五,只在自己机器上测过一次就上线,换台机器可能因为工具版本或路径不同而失败。养成先在测试环境跑、再加日志、最后上线的顺序,能省下大量排查时间。
结语
Shell 脚本的价值不在于语法多精巧,而在于它把重复劳动固化成可靠的流程。从写好第一个 hello.sh 开始,逐步掌握变量、判断、循环和函数,再用定时任务把备份、巡检交给机器,你会发现运维工作里大量琐事都可以交给脚本。下一次再遇到需要重复做三遍以上的手工操作,不妨先停下来,把它写成脚本。
- 点赞
- 收藏
- 关注作者
评论(0)