Getopts默认大小写bash脚本

时间:2019-05-30 20:19:05

标签: linux bash switch-statement getopts

我想使用getopts,但是默认情况下不起作用。

我尝试过的代码是:

while getopts "sdp" arg; do
case "$arg" in
s) 
    echo "1" 
;;
p)
    echo "2" 
;;
d) 
   echo "3" 
;;
*) 
   echo "default"
;;
esac

当我运行该过程时:./myTask

我没有收到任何输出

2 个答案:

答案 0 :(得分:2)

它按预期工作。

默认情况下不是处理没有参数的情况,而是提供无效参数的情况:

$ ./myTest -X
./myTest: illegal option -- X
default

在这种情况下,通常您会写一条使用情况消息。

答案 1 :(得分:0)

这是case语句的默认值,但是它意味着getopts上下文中的特定内容:您定义了一个选项,但没有子句可以处理。

例如,如果运行./myTask -z,则会在此处的另一个答案中看到@that_other_guy声明的“默认”输出。

如果您要输出表明未提供任何选项的内容:

然后在while getopts块之后但在shift $(($OPTIND - 1))行之前,执行此操作(对if块进行所需的处理:

if ((OPTIND == 1))
then
    echo "No options specified"
fi

请注意,这并不表示未指定任何自变量(例如,您的问题中的./myTask)。要执行此操作,请在shift行的之后中添加以下内容:

if (($# == 0))
then
    echo "No positional arguments specified"
fi

请在我的答案here中查看getopts函数的参考实现。