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

时间:2017-07-17 09:29:23

标签: linux shell unix ksh gnu

我正在尝试编写一个带有可选标志和两个必需字符串作为参数的ksh脚本。该标志表示为-a。因此,当正确时,该命令看起来像下列之一:

  1. command.sh -a -b abc -c 123
  2. command.sh -b xyz -c 789
  3. 我在我的脚本中使用以下代码:

    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(见上文)工作正常。

    任何人都可以指出出现了什么问题,并建议进行整改吗?

    ...谢谢

2 个答案:

答案 0 :(得分:1)

选项字母后面的冒号(:)指定选项(aka flag)需要参数;因为你在'a'之后有一个冒号(:),getopts期待一个参数跟-a一起;试试这个:

while getopts "ab:c:" args

答案 1 :(得分:0)

检查是否设置了变量的

-z选项未正确使用。请参阅以下链接以了解正确用法: How to check if a variable is set in Bash?