通过命令行将标志和其他参数一起传递给 ksh 脚本

Pass a flag along with other arguments via command line to a ksh script

我正在尝试编写一个 ksh 脚本,该脚本采用一个可选标志和两个强制字符串作为参数。该标志表示为 -a。因此,命令正确时看起来像以下之一:

  1. command.sh -a -b abc -c 123
  2. command.sh -b xyz -c 789

我在脚本中使用了以下代码:

while getopts "a:b:c:" args
do
    case $args in

        a) # Flag
            flag=1
            ;;
        b) # str1
            str1=$OPTARG
            ;;
        c) # str2
            str2=$OPTARG
            ;;
        *) # usage
            echo "- - - - "
            exit 0
            ;;
    esac
done

if [[ -z $str1 || -z $str2 ]]
then
    echo "Incomplete arguments supplied\n"
    exit 1
fi

...

当我执行 1(见上文)时这样做会抛出消息 Incomplete arguments supplied,其中 2(见上文)工作正常。

谁能指出问题所在并建议改正?

谢谢...

用于检查变量是否设置的-z 选项未正确使用。正确用法参考下面link: How to check if a variable is set in Bash?

选项字母后的冒号(:)指定选项(又名标志)需要一个参数;因为在 'a' 之后有一个冒号 (:),所以 getopts 期望一个参数与 -a 一起使用;试试这个:

while getopts "ab:c:" args