You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:36:07