我正在尝试编写一个带有可选标志和两个必需字符串作为参数的ksh脚本。该标志表示为-a
。因此,当正确时,该命令看起来像下列之一:
command.sh -a -b abc -c 123
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(见上文)工作正常。
任何人都可以指出出现了什么问题,并建议进行整改吗?
...谢谢
答案 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?