Bash脚本实现参数校验、帮助提示及命名参数传参功能
实现方案
直接替换原脚本内容为以下代码即可满足需求:
#!/bin/bash # 输出帮助提示的公共函数 show_help() { echo "使用说明: $0 需要传入2个参数,分别为姓名(Name)、地址(address)" echo "支持命名参数传参,不受传入顺序限制,可用参数如下:" echo " --name <姓名> 指定用户姓名" echo " --address <地址> 指定居住地址" echo " --help 查看当前帮助提示" echo "使用示例:" echo " ./my_script.bash --address Delhi --name Gupta" echo " 输出结果: Mr./Ms. Gupta lives in Delhi ." } # 初始化参数存储变量 NAME="" ADDRESS="" # 【可选:兼容原位置参数传参】如果需要保留原来直接按顺序传两个值的写法,取消下面这段注释即可 # if [[ $# -eq 2 && ! "$1" =~ ^-- ]]; then # NAME="$1" # ADDRESS="$2" # shift 2 # fi # 循环解析命名参数 while [[ $# -gt 0 ]]; do case "$1" in --help) show_help exit 0 ;; --name) if [[ -z "$2" || "$2" =~ ^-- ]]; then echo "错误:--name参数后缺少传入的姓名值" show_help exit 1 fi NAME="$2" shift 2 ;; --address) if [[ -z "$2" || "$2" =~ ^-- ]]; then echo "错误:--address参数后缺少传入的地址值" show_help exit 1 fi ADDRESS="$2" shift 2 ;; *) echo "错误:不识别的参数 $1" show_help exit 1 ;; esac done # 校验必填参数是否都已传入 if [[ -z "$NAME" || -z "$ADDRESS" ]]; then echo "错误:参数不全,必须同时传入姓名和地址两个参数" show_help exit 1 fi # 原脚本输出逻辑 echo " Mr./Ms. $NAME lives in $ADDRESS ."
逻辑说明
- 单独封装
show_help函数统一管理帮助文案,无参数执行、参数缺失/错误、传入--help时都会调用该函数输出提示,避免重复代码。 - 参数解析用
while+case遍历所有传入参数,匹配到对应命名参数时就把后续的值存入对应变量,通过shift 2跳过已经处理的参数键和值,天然支持参数乱序传入。 - 增加了参数值合法性校验:如果传了
--name/--address但后面没跟对应的值(或者后面跟的是另一个--开头的参数),会直接报错提示。 - 所有参数解析完成后做最终校验,只要姓名、地址任意一个值为空,就报错退出。
- 预留了原位置参数传参的兼容代码,需要的话取消注释就能同时支持新旧两种传参方式。
测试验证
- 执行
./my_script.bash --help:正常输出帮助说明 - 执行
./my_script.bash:提示参数不全,输出帮助 - 执行
./my_script.bash --name Wang:提示参数不全,输出帮助 - 执行
./my_script.bash --address Guangzhou --name Wang:正常输出Mr./Ms. Wang lives in Guangzhou .,顺序不影响结果 - 执行
./my_script.bash --phone 13xxxx:提示不识别的参数,输出帮助
内容的提问来源于stack exchange,提问作者shivam
相关产品推荐
相关产品推荐

