Shell 脚本入门:从第一个脚本到自动化运维

举报
yd_259811995 发表于 2026/11/06 06:07:53 2026/11/06
【摘要】 对于刚接触 Linux 的开发者来说,Shell 脚本往往是第一件趁手的自动化工具:它不需要编译,不依赖框架,几行命令就能把重复的手工操作变成可重复执行的程序。本文从第一个脚本写起,聊聊变量、判断、循环、函数这些基本功,再落到备份、巡检这类真实的运维场景。一、写出第一个脚本新建文件 hello.sh,第一行写上 #!/bin/bash,这一行叫作 shebang,告诉系统用哪个解释器来执行脚...

对于刚接触 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 开始,逐步掌握变量、判断、循环和函数,再用定时任务把备份、巡检交给机器,你会发现运维工作里大量琐事都可以交给脚本。下一次再遇到需要重复做三遍以上的手工操作,不妨先停下来,把它写成脚本。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。