BASH getopts定义$OPTARG可以是什么
如果我做对了,如果我这样做:BASH getopts定义$OPTARG可以是什么,bash,Bash,如果我做对了,如果我这样做: usage () { echo "USAGE MANUAL" echo "-u -> displays this usage manual" echo "-t -> sets EXEC variable to echo" echo "-t -> sets DEPTH variable to inputed string" exit 1 } while getopts ":t:u:d:" o; do case "${o}" in t) EX
usage ()
{
echo "USAGE MANUAL"
echo "-u -> displays this usage manual"
echo "-t -> sets EXEC variable to echo"
echo "-t -> sets DEPTH variable to inputed string"
exit 1
}
while getopts ":t:u:d:" o; do
case "${o}" in
t)
EXEC=echo
;;
d)
DEPTH=${OPTARG}
;;
u)
usage
;;
esac
done
shift $((OPTIND-1))
if [ -z "${d}" ] || [ -z "${t}" ]; then
usage
fi
我必须提供如下内容:
./script -d
问题是,我如何限制d的参数可以是什么。例如,如果有人键入
/script-d full
或/script-d empty
会将深度的值更改为full或empty,但如果他们输入/script-d infinite
之类的内容,脚本将不会运行,并回显提供的错误参数。可以使用嵌套的大小写
:
./script -d full
所以基本上我把一个箱子放在一个箱子里?是的,这是一种可能性。它不一定需要嵌套。您可以在处理完
getopts
后进行验证。这是错误的:如果[-z“${d}”]| |[-z“${t}”];然后
--您从未设置d
和t
变量,您希望使用while getopts循环中设置的变量,-t
和-u
不接受参数,因此希望getopts:tud:
d) case "$OPTARG" in
full|empty) DEPTH=$OPTARG ;;
*) echo 'Invalid depth' >&2 ; exit 1 ;;
esac
;;