Shell 脚本速记:变量、判断、循环与日志小技巧
【摘要】 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)