温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎样传参给运维Shell脚本

发布时间:2026-11-08 20:36:33 来源:亿速云 阅读:98 作者:小樊 栏目:系统运维

把参数传给运维 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"

✅ 优点:

  • 参数顺序不固定
  • 可读性高
  • 运维脚本主流写法

四、长参数(–env prod,进阶)

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

如果你愿意,可以告诉我:

  • 你是什么运维场景(部署 / 重启 / 备份 / 巡检)
  • 用 CentOS / Ubuntu / K8s / 容器 哪种

我可以直接帮你写一整套脚本模板。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手