【问题标题】:Pass a flag along with other arguments via command line to a ksh script通过命令行将标志与其他参数一起传递给 ksh 脚本
【发布时间】:2017-07-17 09:29:23
【问题描述】:

我正在尝试编写一个 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(见上文)工作正常。

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

谢谢...

【问题讨论】:

    标签: linux shell unix ksh gnu


    【解决方案1】:

    选项字母后的冒号(:)表示选项(又名标志)需要一个参数;因为'a'后面有一个冒号(:),所以getopts 期望与-a 一起出现一个参数;试试这个:

    while getopts "ab:c:" args
    

    【讨论】:

    • 谢谢!这行得通...我认为执行以下操作也是相同的:while getopts "b:c:a" args(即,将不需要参数的标志放在最后,而没有成功的: 使其看起来更干净)。
    【解决方案2】:

    -z 选项来检查变量是否被正确使用。正确使用请参考以下链接: How to check if a variable is set in Bash?

    【讨论】:

    • 我尝试了这些更改,但仍然收到相同的消息:Incomplete arguments supplied\n
    猜你喜欢
    • 1970-01-01
    • 2012-06-19
    • 2017-04-20
    • 2012-12-23
    • 1970-01-01
    • 2014-03-08
    • 2013-10-22
    • 2016-12-19
    • 1970-01-01
    相关资源
    最近更新 更多