Shell特殊变量与数组
特殊变量——脚本的参数
脚本也能像命令一样接收参数,通过$1、$2……来拿:
#!/bin/bash
# 文件名: args.sh
# 用法: ./args.sh nginx /etc/nginx/nginx.conf 80
echo "脚本名: $0" # ./args.sh
echo "第1个参数: $1" # nginx
echo "第2个参数: $2" # /etc/nginx/nginx.conf
echo "第3个参数: $3" # 80
echo "参数个数: $#" # 3
echo "所有参数: $@" # nginx /etc/nginx/nginx.conf 80
echo "上条命令退出码: $?" # 0=成功,非0=失败
echo "当前脚本PID: $$" # 当前进程ID2.4 数组——一组数据一个变量搞定
#!/bin/bash
# 定义数组(空格分隔,小括号包起来)
servers=("web01" "web02" "db01" "cache01")
# 访问元素(索引从0开始)
echo "第一个: ${servers[0]}" # web01
echo "第三个: ${servers[2]}" # db01
# 所有元素
echo "全部: ${servers[@]}"
# 数组长度
echo "共${#servers[@]}台机器"
# 遍历数组(运维最常用)
for s in "${servers[@]}"; do
echo "正在部署 $s ..."
# scp app.tar.gz $s:/tmp/
done问题总结
变量赋值等号两边绝不能有空格——
name="张三"✅,name = "张三"❌引用变量永远加双引号——
"$var"✅,$var❌(变量里有空格就炸)生产脚本第一行必须是
#!/bin/bash,不是#!/bin/sh脚本写完先
bash -x跑一遍,看清每一步执行了什么rm -rf前面一定要先echo确认路径,别手滑删了根目录用
$()取命令结果,别用反引号——可嵌套、可读性好
原创
Shell特殊变量与数组
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法