Bash脚本参数校验问题:请求修正参数判断逻辑
脚本问题排查与修正
原脚本存在的问题
- 条件判断语法错误:
[[、]]、[、]前后必须保留空格,原脚本里![["$i" =~ $re]]、[["$i" =~ $re]]、[ $i]均不符合Bash语法规范。 - 逻辑结构混乱:数字和非数字是互斥判断,无需嵌套重复检查;
man <参数>的检查逻辑不应放在数字/字符判断的else分支中,因为非数字参数可能同时存在对应的man手册页。 - 参数处理不当:
$*无法正确识别带空格的参数,应替换为"$@"来保证参数完整性。 man命令检查方法错误:原脚本中[ $i]完全无法实现判断man <参数>是否可执行的需求,需改用专用方式检查手册页是否存在。
修正后的脚本
#!/bin/bash echo "Hello $LOGNAME!" # 检查是否传入参数 if [ $# -eq 0 ]; then echo 'Try again, no parameters were entered' else echo "Num of parameters is $#" fi # 定义数字匹配正则 re='^[0-9]+$' # 遍历所有参数 for i in "$@" do # 判断是否为数字 if [[ "$i" =~ $re ]]; then echo "Parameter $i is digital" else echo "Parameter $i is non-numeric (alphabetical or symbolic)" fi # 判断是否有对应的man手册页 if man -w "$i" >/dev/null 2>&1; then echo "$i might be a command/function. Try to use man or --help" fi done
修正说明
- 修复所有条件判断的语法问题,确保
[[/]]、[/]前后有空格。 - 重构逻辑:将数字判断与
man页面检查分离,满足需求中三个独立的判断方向。 - 使用
"$@"遍历参数,支持带空格的参数输入场景。 - 用
man -w "$i" >/dev/null 2>&1检查手册页:man -w会返回手册页路径,不存在则返回非0值;重定向输出到/dev/null避免冗余信息干扰。 - 优化字符串输出格式,用双引号包裹变量,避免特殊字符引发解析问题。
内容的提问来源于stack exchange,提问作者Ilya Putilin
相关产品推荐
相关产品推荐

