我试图编写一个脚本,我使用选项操作变量,但如果没有指定选项,则有快捷方式。例如,我有add
,show
,set
和delete
,但如果我没有指定其中任何一个,那么输入会被解释为确定要执行的操作:
script key
是script show key
script key=value
是script set key=value
我为选项写了一个case
声明,但是在收集中,是否可以说"转到案例X"?:
case $1 in
add)
#blah;;
show)
#blah;;
set)
#blah;;
delete)
#blah;;
*)
if [[ $1 == *=* ]]; then
#go to case "set"
elif [[ $1 ]]; then
##go to case "show"
else
echo "FAILURE!!!"
exit 1
fi
esac
修改
我想出了:
case $1 in
add)
#blah;;
delete)
#blah;;
set|*=*)
#blah;;
show|*)
#blah;;
esac
哪个几乎有效,但现在如果没有最后一个参数(即我只是执行script
),它将尝试运行script show
。
答案 0 :(得分:4)
我建议像这样构建你的代码:
if [[ -z $1 ]]; then
echo "FAILURE!!!"
exit 1
fi
case $1 in
add)
#blah;;
set|*=*)
#blah;;
delete)
#blah;;
show|*)
#blah;;
esac
即。在点击case
语句之前失败,并使用|
组合每个案例的模式。
答案 1 :(得分:2)
您可以在"${1?arg needed}"
开头使用$1
代替case
,以便在未提供$1
时使脚本失败。
case "${1?arg needed}" in
add)
echo "add";;
delete)
echo "delete";;
set|*=*)
echo "set";;
show|*)
echo "show";;
esac
测试:
bash ./script
-bash: 1: arg needed
bash ./script foobar
show
bash ./script abc=123
set
答案 2 :(得分:-2)
尝试:
case $1 in
add)
#blah;;
show|*)
#blah;;
set|*=*)
#blah;;
delete)
#blah;;
*)
echo "FAILURE!!!"
exit 1
esac