Bash getopts 错误处理

Bash getopts 错误处理

这是我玩Getopts时遇到的错误。以下是我一直在执行脚本时简单监听 3 个选项的代码片段。

while getopts "vcn" opt; do
  case $opt in
     v) echo "Print V" ;;
     c) echo "Print C" ;;
     n) echo "Print N" ;;
     *) echo "Invalid Option" && exit 1 ;;
  esac 
done

我不确定为什么在执行此脚本时会出现以下错误,即使我已经使用 *) 选项处理了错误。错误句柄如下图所示工作,但出现未编程错误。

终端上的错误消息

答案1

请参阅参考手册:

getopts可以通过两种方式报告错误。如果第一个字符为可选字符串是冒号,则使用静默错误报告。在正常操作中,当遇到无效选项或缺少选项参数时,将打印诊断消息。

如果看到无效选项,则getopts放入?姓名如果不是静默,则打印一条错误消息并取消设置OPTARG如果getopts是静默,则将找到的选项字符放入其中OPTARG,并且不打印任何诊断消息。

就你而言,可选字符串vcn,因此getopts本身会打印一条错误消息。要禁用它,请改用getopts :vcn

另外,您的:

echo "Invalid Option" && exit 1

应该:

echo>&2 "Invalid Option"; exit 1

那是:

  • 错误应该转到标准错误(文件描述符 2),而不是标准输出。
  • 而且你应该无条件退出,而不仅仅是echo成功。

相关内容