Bash 如何解析无效选项?

Bash 如何解析无效选项?,bash,Bash,我正在编写以下脚本来解析一些选项: #!/bin/bash while [[ $# > 1 ]] do key="$1" case $key in -i|--inbound) inbound="true" shift # past argument ;; -o|--outbound) outbound="true" shift # past argument ;; *) echo "ho

我正在编写以下脚本来解析一些选项:

#!/bin/bash
while [[ $# > 1 ]]
do
key="$1"
case $key in
    -i|--inbound)
        inbound="true"
    shift # past argument
    ;;
    -o|--outbound)
        outbound="true"
    shift # past argument
    ;;
    *)
        echo "hola"
        exit 1

    ;;
esac
shift # past argument or value
done
echo $inbound
echo $outbound
问题是我想终止程序,如果收到无效选项,我尝试了以下操作:

*)
            exit 1
            echo "invalid option"


        ;;
但是,当我像这样运行程序时:bash script.sh-invalid,任何情况都会发生,我希望得到任何修复此问题的建议,我希望得到的输出如下:

invalid option
while[$#>1]

应该是

while (($# >= 1))
  • 您需要的是数字比较,而不是字符串比较。虽然在本例中,它没有任何区别,但如果与
    2
    相比,它会产生很大的区别,因为字符串
    10
    小于字符串
    2

  • 无论如何,如果您用一个参数调用脚本,
    $#
    将是一个参数。因此,大于比较是不正确的

  • 最后,如果你真的有:

        exit 1
        echo "hola"
    

    回显将永远不会执行,因为退出将首先发生。

    不是问题,而是
    用于
    [
    /
    [
    中的字符串比较。您需要
    -gt
    ($#>1))
    。将
    设置-x
    添加到脚本中(或运行
    bash-x script.sh…
    )您应该看到您的逻辑至少有一个问题(以及为什么
    bash script.sh-invalid
    没有做任何事情)很抱歉,当我把代码放在第一位是回显,然后是出口1时,这是一个错误,但什么也没有发生,我已经更改了问题中的代码。@安德尔克:是的,那也行。另一个简单的方法是对key do@rici使用
    ,但它不允许您使用shift键,并且有接受另一个参数的选项。@user138717:有了这个吗编辑,你修复了错误的,但是正确的现在是错误的。