Bash脚本传入Test1/Test2仍提示参数非法问题咨询
问题原因
你的代码报错是逻辑运算符组合不符合预期导致的,具体拆解如下:
你使用||(逻辑或)连接了三个判断条件,逻辑或的规则是只要任意一个条件为真,整个判断表达式就为真,就会进入错误分支。
当你传入合法值Test1时:
$1 == ""结果为假$1 != "Test1"结果为假$1 != "Test2"结果为真
整个表达式最终为真,所以触发报错。传入Test2时同理,$1 != "Test1"为真,同样会触发报错。
修正方案
你需要的逻辑是:只要满足「参数为空」或者「参数既不是Test1也不是Test2」,就触发报错,修正后的代码如下:
#!/bin/bash # 写法1:调整逻辑运算符,用-z判断空参数更符合bash规范 if [[ -z "$1" || ( "$1" != "Test1" && "$1" != "Test2" ) ]]; then echo "ERROR: no argument or bad argument passed. Only Test1 or Test2 is accepted" exit 2 else echo "ok good value" exit 0 fi
如果后续可接受的枚举值会增加,也可以用更简洁的case写法:
#!/bin/bash case "$1" in Test1|Test2) echo "ok good value" exit 0 ;; *) echo "ERROR: no argument or bad argument passed. Only Test1 or Test2 is accepted" exit 2 ;; esac
内容的提问来源于stack exchange,提问作者Marco Ferrara
相关产品推荐
相关产品推荐

