我希望为我的脚本设置 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 处理中的错误;应按规定写入诊断消息,但退出状态应为零。
更多信息请见这里