我想对我正在编写的bash脚本进行一些错误检查。特别是,我希望确保以下选项不被视为选项(故意)留空的论据。
让我们说下面的代码片段
while getopts “hhelpc1:2:” OPTION
do
case "$OPTION" in
h|help)
usage
exit 1
;;
1)
var1=${OPTARG}
;;
2)
var2=${OPTARG}
;;
c)
test1
;;
esac
done
假设我的脚本名为test.sh
做类似
的事情./test.sh -1 -2 dddd -c
在上述情况下,test1输出一个错误信息,即-2选项为空。相反,我想提出-1为空的警告,而目前-2将被视为-1的参数。
任何帮助?
由于 安德烈
答案 0 :(得分:1)
getopts
:
在opt字符串中添加前导:
以自行处理getopts错误。
这是你的代码的改造,我确信有很多我没有抓住的案例
#!/bin/bash
usage () { echo usage ...; }
test1 () { echo test1; }
shopt -s extglob
while getopts ":hc1:2:" opt
do
case $opt in
h)
usage
exit 1
;;
1)
case $OPTARG in
-[hc2]*)
echo "error: required argument missing for -1"
usage
exit 1
;;
*) var1=$OPTARG
;;
esac
;;
2)
case $OPTARG in
-[hc1]*)
echo "error: required argument missing for -2"
usage
exit 1
;;
*) var2=$OPTARG
;;
esac
;;
c)
test1
;;
:)
echo "error: required argument missing for -$OPTARG"
usage
exit 1
;;
\?)
# unknown argument, handle accordingly
;;
esac
done
shift $((OPTIND - 1))
echo "var1=$var1"
echo "var2=$var2"
echo "rest=$*"
更新2014-01-23
这是一种技巧:
do_test1=false
while getopts ...
case $opt in
...
c) do_test1=true ;;
...
esac
done
shift $((OPTIND - 1))
# execute function "test1" if "-c" was given:
$do_test1 && test1