通过命令行将标志和其他参数一起传递给 ksh 脚本
Pass a flag along with other arguments via command line to a ksh script
我正在尝试编写一个 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(见上文)工作正常。
谁能指出问题所在并建议改正?
谢谢...
用于检查变量是否设置的-z 选项未正确使用。正确用法参考下面link:
How to check if a variable is set in Bash?
选项字母后的冒号(:
)指定选项(又名标志)需要一个参数;因为在 'a' 之后有一个冒号 (:
),所以 getopts
期望一个参数与 -a
一起使用;试试这个:
while getopts "ab:c:" args
我正在尝试编写一个 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(见上文)工作正常。
谁能指出问题所在并建议改正?
谢谢...
用于检查变量是否设置的-z 选项未正确使用。正确用法参考下面link: How to check if a variable is set in Bash?
选项字母后的冒号(:
)指定选项(又名标志)需要一个参数;因为在 'a' 之后有一个冒号 (:
),所以 getopts
期望一个参数与 -a
一起使用;试试这个:
while getopts "ab:c:" args