如何实现Bash脚本接收命令行参数指定环境并支持-h帮助选项
Bash脚本多参数与环境指定功能实现
核心实现逻辑
使用Bash内置的getopts工具处理命令行选项,替代原有的位置变量传参方式,天然支持多参数、选项校验、帮助提示等能力。
完整修改后脚本
#!/bin/bash # 预定义环境与region的映射关系 LOWER=us-east-1 HIGHER=us-west-1 # 帮助信息输出函数 show_help() { echo "用法: ./test.sh [选项]" echo "选项说明:" echo " -e <环境标识> 指定运行环境,可选值:LOWER(对应us-east-1)、HIGHER(对应us-west-1)" echo " -h 打印帮助信息并退出" } # 初始化目标region变量 TARGET_REGION="" # 解析命令行参数 while getopts "e:h" opt; do case "${opt}" in e) INPUT_ENV="${OPTARG}" # 匹配环境对应的region值 case "${INPUT_ENV}" in LOWER) TARGET_REGION="${LOWER}" ;; HIGHER) TARGET_REGION="${HIGHER}" ;; *) echo "错误:不支持的环境标识 ${INPUT_ENV},仅支持LOWER/HIGHER" >&2 exit 1 ;; esac ;; h) show_help exit 0 ;; \?) echo "错误:无效选项 -${OPTARG}" >&2 show_help >&2 exit 1 ;; :) echo "错误:选项 -${OPTARG} 需要传入对应参数" >&2 show_help >&2 exit 1 ;; esac done # 校验是否传入有效环境 if [ -z "${TARGET_REGION}" ]; then echo "错误:必须通过-e参数指定运行环境" >&2 show_help >&2 exit 1 fi # 处理域名场景下无横线的region格式 DOMAIN_REGION="${TARGET_REGION//-/}" # -------------------------- 原有核心业务代码 -------------------------- # 注意将硬编码的region替换为变量 username_json=$(aws xxxx xxxx xxxxxxx --query xxxx --output text --region "${TARGET_REGION}" ) json_token=$(curl -k \ -H "Content-Type: application/json" \ -X POST \ -d \ '{ "username":"'$username'", "password":"'$password'" }' \ https://${DOMAIN_REGION}.xxxxxxx | jq '.token')
调用效果验证
- 执行
./test.sh -h:直接输出帮助说明后退出 - 执行
./test.sh -e LOWER:自动使用us-east-1作为region值运行所有命令 - 执行
./test.sh -e HIGHER:自动使用us-west-1作为region值运行所有命令
内容的提问来源于stack exchange,提问作者wlg
相关产品推荐
相关产品推荐

