如何允许参数和不允许参数,并使用 getopts 对它们采取不同的行动

如何允许参数和不允许参数,并使用 getopts 对它们采取不同的行动

我希望为我的脚本设置 getopts,使其不接受任何参数 ( -p),但也可以接受一个参数 ( -p library)。两者都需要接受。它们(参数和无参数)都是允许的。参数应该允许是任何字符串。见下文:

while getopts "p:sdih" opt; do
                case ${opt} in
                        p )
                                #WHEN NO ARGUMENT IS GIVEN, DO THIS

                                selection="plex"

                                #WHEN AN ARGUMENT IS GIVEN, DO THIS

                                selection="plex"
                                argument=true
                                optarg="$OPTARG"
                                ;;

                        s )
                                selection="sonarr"
                                ;;

                        d )
                                selection="deluge"
                                ;;
                        i )
                                selection="info"
                                ;;

                        h )
                                usage | column -t -s "|"
                                exit
                                ;;
                        \? )
                                echo "Invalid option"
                                usage | column -t -s "|"
                                exit
                                ;;
                esac
        done 2>/dev/null
        shift $((OPTIND -1))

这就是它需要的工作方式。但我对 getopts 还不熟悉,所以我还不知道该怎么做……

答案1

要检查缺少的参数,请启动选择字符串用冒号:代替"p:sdih"":p:sdih"

\?)然后,像这样添加一个 case 参数:

:) echo "Option $OPTARG has no argument."
   exit
   ;;

您可以通过评估来检查多个选项"$OPTARG"

如果缺少选项参数:

  • 如果 optstring 的第一个字符是冒号,则应将名称指定的 shell 变量设置为字符,并将 shell 变量 OPTARG 设置为找到的选项字符。

  • 否则,应将 name 指定的 shell 变量设置为问号字符,则应取消设置 shell 变量 OPTARG,并将诊断消息写入标准错误。此情况应被视为在向调用应用程序呈现参数的方式中检测到的错误,但不应被视为 getopts 处理中的错误;应按规定写入诊断消息,但退出状态应为零。

更多信息请见这里

相关内容