Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
BASH getopts定义$OPTARG可以是什么_Bash - Fatal编程技术网

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
   ;;