Shell 脚本速记:变量、判断、循环与日志小技巧

举报
yd_241044277 发表于 2026/10/24 21:20:14 2026/10/24
【摘要】 1. 变量与引号变量赋值时等号两边不能加空格,取值用 $。双引号会解析变量,单引号原样输出:name="world"echo "hello $name" # hello worldecho 'hello $name' # hello $name脚本开头建议写 #!/bin/bash,再加一行 set -euo pipefail,让命令失败即停、未定义变量即报错。 2. 条件判断用 ...

1. 变量与引号

变量赋值时等号两边不能加空格,取值用 $。双引号会解析变量,单引号原样输出:

name="world"
echo "hello $name"   # hello world
echo 'hello $name'   # hello $name

脚本开头建议写 #!/bin/bash,再加一行 set -euo pipefail,让命令失败即停、未定义变量即报错。

2. 条件判断

用 [[ ]] 写条件比 [ ] 更顺手,变量不用再加引号防空值:

if [[ -f /etc/nginx/nginx.conf ]]; then
  echo "nginx 配置存在"
elif [[ $1 == "reload" ]]; then
  nginx -s reload
else
  echo "用法: $0 [reload]"
fi

常用文件测试:-f 文件存在、-d 目录存在、-z 字符串为空。

3. 循环

批量操作最省力的一段。比如遍历日志、带重试的请求:

for f in /var/log/*.log; do
  echo "处理 $f"
done

for i in {1..5}; do
  curl -fsS "https://example.com/api/$i" && break
  sleep 2
done

需要计数用 ((i++)),逐行读文件用 while read:

while read -r line; do
  echo "行: $line"
done < servers.txt

4. 日志与排障

脚本跑崩先加这三招:set -x 打印每条实际执行的命令;输出重定向到日志 >> app.log 2>&1;用 shellcheck 检查常见写法问题。

LOG=/var/log/deploy.log
exec >> "$LOG" 2>&1   # 之后的所有输出全部进日志
date "+%F %T 开始部署"

5. 小例子:备份目录

保留近 7 天的打包备份,超期自动清理:

#!/bin/bash
set -euo pipefail
SRC=/data/www; DST=/backup
mkdir -p "$DST"
tar -czf "$DST/www-$(date +%F).tgz" "$SRC"
find "$DST" -name "www-*.tgz" -mtime +7 -delete
echo "备份完成: $DST"

变量、判断、循环、日志——Shell 脚本八成场景都靠这四样,熟练之后很多运维手工活都能一键化。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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