Shell 脚本入门:变量、判断与循环一次讲清

举报
yd_283162409 发表于 2026/11/06 12:35:44 2026/11/06
【摘要】 先写一个能跑的脚本写 Shell 脚本不需要先学一门新语言:你每天在终端敲的命令,换个文件存起来就是脚本。新建一个文件 deploy.sh,第一行写 #!/bin/bash,下面按顺序写命令,保存后 chmod +x deploy.sh,再 ./deploy.sh 就能跑。这一行叫 shebang,告诉系统用哪个解释器执行这个文件;丢了它,系统会用默认 shell 跑,行为可能不一样。变量:...

先写一个能跑的脚本

写 Shell 脚本不需要先学一门新语言:你每天在终端敲的命令,换个文件存起来就是脚本。新建一个文件 deploy.sh,第一行写 #!/bin/bash,下面按顺序写命令,保存后 chmod +x deploy.sh,再 ./deploy.sh 就能跑。这一行叫 shebang,告诉系统用哪个解释器执行这个文件;丢了它,系统会用默认 shell 跑,行为可能不一样。

变量:等号两边别加空格

给变量赋值是最先踩坑的地方:name="world" 是对的,name = "world" 是错的——等号两边一旦有了空格,shell 会把 name 当成一条命令去执行。引用变量用 $name,想让变量传给子进程再加 export。还有两个习惯值得养成:变量名用小写或有意义的名字,别用单个字母;凡是可能为空的变量,引用时加双引号写成 "$name",空值时不会把命令拆散。

判断:if 语句的括号里有讲究

Shell 的判断写在方括号里:if [ -f "$file" ]; then echo "文件存在"; fi。常用的测试有 -f(是文件)、-d(是目录)、-z(字符串为空)、字符串相等用 =、数字比较用 -eq、-gt、-lt。注意两个细节:左括号 [ 后面和右括号 ] 前面必须有空格,因为 [ 本身就是一条命令;变量一定要加引号,否则变量为空时 [ = "x" ] 会直接报语法错。

循环:for 和 while 各管一摊

明确要遍历什么用 for:for f in *.log; do echo "$f"; done 能逐个处理当前目录下的日志文件;for i in $(seq 1 10); do ...; done 用来数数。不知道循环几次、要一直等某个条件时用 while,比如 while read line; do echo "$line"; done < list.txt 逐行读文件。循环体里 break 跳出、continue 跳过本次,行为和别的语言一样。

一个完整的小例子

把上面几点拼起来,就是一个能用的备份脚本:遍历 *.log,先判断备份文件是否已存在,存在就跳过,不存在就复制一份加 .bak。十来行代码,手动操作半小时的活一秒干完。脚本的价值就在这里:把“这次手动敲一遍,下次还得敲”的操作固化下来。

三个新手最容易踩的坑

第一,文件从 Windows 传过来时行尾可能带上 \r,执行会报 bad interpreter,用 dos2unix 或 sed -i 's/\r$//' 处理一下。第二,脚本开头加上 set -e,任何一条命令出错整个脚本立刻停下,比让它带着错误继续跑要安全。第三,别在脚本里写绝对路径的密码或密钥,敏感信息走环境变量传进来,脚本只负责干活。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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