getopts 未提供参数

2024-04-26

如何检查是否没有提供必需的参数?我发现 switch case 中的“:”选项应该足以达到此目的,但它永远不会进入该 case(代码块)。我是否将“冒号大小写”放在开头或其他位置并不重要。

我的代码:

while getopts :a:b: OPTION;
do
     case "$OPTION" in
         a)
             var1=$OPTARG
             ;;
         b)
             var2=$OPTARG
             ;;
         ?)
             exitScript "`echo "Invalid option $OPTARG"`" "5"
             ;;
         :)
             exitScript "`echo "Option -$OPTARG requires an argument."`" "5"
             ;;
         *)
             exitScript "`echo "Option $OPTARG unrecognized."`" "5"
             ;;
     esac
done

提前谢谢。


你必须逃离?。下一个可以(部分)工作。

err() { 1>&2 echo "$0: error $@"; return 1; }
while getopts ":a:b:" opt;
do
        case $opt in
                a) aarg="$OPTARG" ;;
                b) barg="$OPTARG" ;;
                :) err "Option -$OPTARG requires an argument." || exit 1 ;;
                \?) err "Invalid option: -$OPTARG" || exit 1 ;;
        esac
done

shift $((OPTIND-1))
echo "arg for a :$aarg:"
echo "arg for b :$barg:"
echo "unused parameters:$@:"

部分原因是何时将上面的脚本调用为

$ bash script -a a_arg -b b_arg extra

将会如你所期望的那样工作,

arg for a :a_arg:
arg for b :b_arg:
unused parameters:extra:

但是当你将其称为

bash script -a -b b_arg

将打印

arg for a :-b:
arg for b ::
unused parameters:b_arg:

什么不是,什么是你想要的。

还有UUOE。 (无用回声的使用)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

getopts 未提供参数 的相关文章

随机推荐

  • 使用一组过滤器在给定区域中最新的 AMI ID

    我正在尝试运行下面的代码 但是在执行时出现错误 您能否建议我进行更改 最新的 ami https github com bwood latest ami blob master latest ami py ec2 user ip XXXXX
  • 尝试通过 ts-patch 在 Angular 项目中使用 ts-nameof

    我正在使用 Angular 8 2 并安装ts nameof https github com dsherret ts nameof ts nameof4 2 2 对于我的项目和ts patch https github com nonar
  • 我如何使用 PyObjects 声明 Boost.Python C++ 类

    我想用 PyObjects 编写一个 C 类 以便从 Python 访问它们 并使用现有的 Python 对象实例引用它们 简而言之 我想在 C 类中存储 管理 Python 对象实例 例如 struct Var PyObject Test
  • 使用 Cerberus 进行依赖项验证

    我正在验证 CSV 文件Cerberus http docs python cerberus org en stable index html但我正在努力解决我认为的一些基本逻辑 设想 CSV 文件有 2 列 Column 2仅当以下情况时
  • 按“字符串”名称对 LINQ 进行排序

    问题解决了 解决方案是 Linq Dynamic 你这样做 from c in Context AccountCharts where c Account FK account c Year FK year select c OrderBy
  • 来自 Phonegap Android 的 AJAX 请求失败

    过去两天我一直在研究这个问题 并查看了很多其他建议 是的 我可以让这个简单的ajax请求在phonegap应用程序中工作 无论是在android模拟器上还是在实际的android手机上 我的phonegap版本是 使用phonegap v
  • 将网站水平和垂直居中

    view on http www eveo org http www eveo org方便修改的下载地址 http www eveo org backup eveo rar http www eveo org backup eveo rar
  • 如何返回 MongoDB 中最新日期的元素

    在 MongoDB 上 如何从此列表中选择具有最新日期的元素 id ObjectId 5c5064f39d0c4b52cf6d1d55 Date 12 09 2018 Type A Value 73650 14 id ObjectId 5c
  • 当 dec 不为 0 时,为什么 0xF00 被解释为 NO

    我发现 BOOL x BOOL 0xF00 is NO 价值0xF00非零 但结果仍然是NO 但这打破了我的范式 BOOL 应该作为 NO 0 YES any other value 为什么会这样呢 这是否意味着检查 if object 不
  • Android volley图片缓存问题

    在google自己的volley图像缓存教程中 Returns a cache size equal to approximately three screens worth of images public static int getC
  • 为什么没有定义 PCTSTR 而定义了 LPCTSTR?

    我被指派更新用 MSVC 6 编写的旧代码 我得到了 PCTSTR 的未知定义 但即使我包含了 tchar h 它也没有定义 根据我以前的经验 我知道有 LPTSTR 但没有 PCTSTR 我 grep C Program Files Mi
  • exec 语句将 LOAD_GLOBAL 更改为 LOAD_NAME?

    学习中这个答案 https stackoverflow com a 18647337 65696 令我惊讶的是 我发现exec有奇怪的行为 gt gt gt def f1 return x gt gt gt def f2 exec retu
  • 使用 CGPathContainsPoint SWIFT 时遇到的问题

    我需要检查 CGPoint 是否位于 SKSpriteNode 内 经过一番研究后 CGPathContainsPoint 似乎适合我的目的 if CGPathContainsPoint my sprite path nil my poin
  • 类型模块中的什么类型描述了一个类?什么类型描述了一个函数?

    The new typingPython 3 5 中的 module 提供了许多用于类型注释的工具 它是否提供了封装以下思想的对象或类型class 怎么样的想法function 在下面定义装饰器的代码中 应该代表什么class 应该代表什么
  • 打开与 Java Card 和 Global Platform 的安全连接

    在模拟器上成功开发 Java Card 后 现在我正在处理一个真正的 Java Card 金雅拓 IDCore 3010 http www gemalto com dwnld 6589 IDCore3010 Product Datashee
  • 找不到 Java 安全类

    启动我的程序时 会弹出下一个错误 java lang NoClassDefFoundError 无法初始化类 javax crypto SunJCE b 这意味着这个类丢失了 尽管我手动找到了这个类 可以通过 jar ide 工作 但不能通
  • 如何在 ionic 2 中使用 lokijs-cordova-fs-adapter

    我正在尝试在我的 ionic 2 应用程序中使用 lokijs 我能够使用 lokijs js 当尝试坚持使用适配器时 我无法做到 我准备好 lokijs cordova fs adapter 就可以使用了 但是当我在我的应用程序中引用它时
  • 如何抑制“common-java”规则的警告

    我需要暂时忽略规则 单元测试分支覆盖率不足 common java InsufficientBranchCoverage Reading http docs sonarqube org display SONAR Frequently As
  • 使用 SwiftMailer 批量发送电子邮件

    我目前正在使用迅捷邮递员 http swiftmailer org向多个用户 最多 50 个 发送电子邮件 我已将其设置并正常工作 但是 我不太确定如何从 MySQL 数据库中提取收件人并迭代发送它们 这是我目前拥有的
  • getopts 未提供参数

    如何检查是否没有提供必需的参数 我发现 switch case 中的 选项应该足以达到此目的 但它永远不会进入该 case 代码块 我是否将 冒号大小写 放在开头或其他位置并不重要 我的代码 while getopts a b OPTION