linux - getopts 中的订单参数
问题描述
我必须编写非常简单的脚本。它应该需要 2 个参数 -h 和 -q。两者都是可选的, -h 可以在某个地方。因此,-h -q 应该执行与 -q -h 相同的操作。如果我通过 -a 或 -a -a -a - 应该会发生错误(我的意思是退出 1)。如果我通过 -a -h -a -a -b.... - 它应该返回“我无法识别 -a”+ 调用帮助案例。所以 -h 有优先权。你可以帮帮我吗?
while getopts "hq" OPTION
do
case $OPTION in
h)
echo "Help here!" ;
exit 0;
esac
done
shift $(($OPTIND - 1))
while getopts "hq" OPTION
do
case $OPTION in
q) #quiet - return 0, do nothing.
exit 0;;
*) #If -a or sth
echo "I couldn't recognize args"
echo "Help here"
exit 1
;;
esac
done
解决方案
这是正确的实现:
#!/usr/bin/env bash
while getopts :hq OPTION
do
case $OPTION in
h) echo "Help here!" ;
exit 0;;
q) echo "quiet do nothing."
exit 0;;
?) echo "I couldn't recognize option [$1]"
exit 1;;
esac
done
shift $((OPTIND - 1))
注意:hq
并?)
处理不正确的选项(-a -b ...)
推荐阅读
- excel - Excel VBA - Application.DisplayFormulaBar = True in Workbook_close 什么都不做
- r - 如何在 Rstudio 的查看器中显示任何 tagList
- android - 我可以将可组合函数存储在变量中吗?
- bochs - Bochs 增强型调试器在 16 位模式下不显示 16 位寄存器
- powershell - Powershell - 具有多个标头的 Invoke-RestMethod
- php - 使用 PHPMailer 和 ReCaptcha V2 联系我们
- javascript - 在JS中,需要参数的函数,在没有该参数或没有参数的情况下调用该函数时,它可以工作,为什么?
- javascript - 自定义架构字段类型可以在渲染后运行代码吗?
- node.js - 使用 nodejs/react/socket 实现一个协作文本编辑器,但由于 heroku 服务器速度慢而遇到问题
- firebase - 解决方案应用程序不崩溃