我希望我的bash脚本只接受交换机中的一个字母,后面没有任何字母。
这是我的代码(foo.sh):
#!/bin/bash
while getopts ":ap" jeep;do
case $jeep in
a)
echo 'Hi Brad'
;;
b)
echo 'Hi Eddy'
;;
else)
echo 'Hi whoever'
\?)
echo 'Bad input' >&2
exit 1
;;
esac
done
我希望它像这样:
$ foo.sh -a
Hi Brad
$ foo.sh -b
Hi Eddy
$ foo.sh
Hi whoever
$ foo.sh -r
Bad input
$ foo.sh -ab
Bad input
$ foo.sh -ba
Bad input
相反,如果我使用a
,它会同时运行b
和-ab
(如下所示),我不想要它。
$ foo.sh -ab
Hi Brad
Hi Eddy
此外,else)
并不像我喜欢的那样工作。如果输入没有开关,我希望它说Hi whoever
。
我该如何解决这个问题?
答案 0 :(得分:1)
getopt
无法指定互斥标志,因此您必须创建自己的标志。最简单的方法可能是这样的:
while getopts ":ab" jeep
do
case $jeep in
a)
if [ -n "${run-}" ]
then
exit 1
fi
echo 'Hi Brad'
run=1
;;
b)
if [ -n "${run-}" ]
then
exit 1
fi
echo 'Hi Eddy'
run=1
;;
\?)
if [ -n "${run-}" ]
then
exit 1
fi
echo 'Hi whoever'
run=1
;;
esac
done