所以,我正在设置一个bash脚本,并希望使用getopts解析某些标志的参数。对于一个最小的例子,考虑一个带有标志的脚本-M,它将y或n作为参数。如果我使用以下代码:
#!/bin/bash
# minimalExample.sh
while getopts "M:" OPTION;
do
case ${OPTION} in
M)
RMPI=${OPTARG}
if ! [[ "$RMPI" =~ "^[yn]$" ]]
then
echo "-M must be followed by either y or n."
exit 1
fi
;;
esac
done
我得到以下内容:
$ ./minimalExample.sh -M y
-M must be followed by either y or n.
FAIL: 1
但是,如果我使用以下代码
#!/bin/bash
# minimalExample2.sh
while getopts "M:" OPTION;
do
case ${OPTION} in
M)
RMPI=${OPTARG}
if [ -z $(echo $RMPI | grep -E "^[yn]$") ]
then
echo "-M must be followed by either y or n."
exit 1
else
echo "good"
fi
;;
esac
done
我明白了:
$ ./minimalExample2.sh -M y
good
为什么minimalExample.sh
无效?
答案 0 :(得分:2)
答案 1 :(得分:0)
为什么你在这里需要正则表达式? -M y
与-M n
不同,是吗?所以你肯定会使用一些陈述(case
或if
)来区分彼此。
#!/bin/bash
while getopts "M:" OPTION; do
case ${OPTION} in
M)
case ${OPTARG} in
y)
# do what must be done if -M y
;;
n)
# do what must be done if -M n
;;
*)
echo >&2 "-M must be followed by either y or n."
exit 1
;;
;;
esac
done
请注意>&2
- 错误消息应输出到STDERR
,而不是STDOUT
。