把参数传给运维 Shell 脚本,本质上是在命令行调用脚本时把参数写后面,脚本内部用固定变量或 getopts 来接收。下面按“从简单到规范”讲。
./deploy.sh prod web01
#!/bin/bash
ENV=$1
HOST=$2
echo "环境: $ENV"
echo "主机: $HOST"
$0:脚本名$1~$9:第 1~9 个参数$#:参数个数$@:所有参数(推荐)$*:所有参数(不推荐)if [ $# -lt 2 ]; then
echo "用法: $0 <环境> <主机>"
exit 1
fi
./deploy.sh -e prod -h web01
getopts(标准写法)#!/bin/bash
while getopts "e:h:" opt; do
case $opt in
e) ENV=$OPTARG ;;
h) HOST=$OPTARG ;;
*) echo "用法: $0 -e 环境 -h 主机"; exit 1 ;;
esac
done
echo "环境: $ENV"
echo "主机: $HOST"
✅ 优点:
Shell 原生不支持,但可以用:
for arg in "$@"; do
case $arg in
--env=*) ENV="${arg#*=}" ;;
--host=*) HOST="${arg#*=}" ;;
esac
done
调用:
./deploy.sh --env=prod --host=web01
ENV=prod HOST=web01 ./deploy.sh
脚本里:
echo "$ENV $HOST"
source config.env
./ops.sh -a restart -s nginx -e prod
while getopts "a:s:e:" opt; do
...
done
eval如果你愿意,可以告诉我:
我可以直接帮你写一整套脚本模板。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。