bash getopts 具有多个强制选项

2023-12-19

是否可以使用 getopts 一起处理多个选项?例如,myscript -iR 或 myscript -irv。

另外,我遇​​到的情况是,基于条件脚本需要强制选项。例如,如果脚本的参数是一个目录,我将需要指定 -R 或 -r 选项以及任何其他选项(myscript -iR mydir 或 myscript -ir mydir 或 myscript -i -r mydir 或 myscript -i -R mydir),如果是文件,仅 -i 就足够了(myscript -i myfile)。

我尝试搜索但没有得到任何答案。


您可以连接您提供的选项和getopts会将他们分开。在你的case声明您将单独处理每个选项。

您可以在看到选项时设置一个标志,并检查以确保强制“选项”(!)出现在getopts循环已完成。

这是一个例子:

#!/bin/bash
rflag=false
small_r=false
big_r=false
    
usage () { echo "How to use"; }
    
options=':ij:rRvhm'
while getopts $options option
do
    case "$option" in
        i  ) i_func;;
        j  ) j_arg=$OPTARG;;
        r  ) rflag=true; small_r=true;;
        R  ) rflag=true; big_r=true;;
        v  ) v_func; other_func;;
        h  ) usage; exit;;
        \? ) echo "Unknown option: -$OPTARG" >&2; exit 1;;
        :  ) echo "Missing option argument for -$OPTARG" >&2; exit 1;;
        *  ) echo "Unimplemented option: -$option" >&2; exit 1;;
    esac
done

if ((OPTIND == 1))
then
    echo "No options specified"
fi

shift $((OPTIND - 1))

if (($# == 0))
then
    echo "No positional arguments specified"
fi
    
if ! $rflag && [[ -d $1 ]]
then
    echo "-r or -R must be included when a directory is specified" >&2
    exit 1
fi

这代表了一个完整的参考实现getopts函数,但只是一个更大脚本的草图。

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

bash getopts 具有多个强制选项 的相关文章

随机推荐

  • 如何将正确的 Cabal 规范与 Travis CI 构建中的每个解析器相匹配?

    更新我的后Haskell 包的 https hackage haskell org package crypto enigma cabal file 到阴谋集团 2 2 https github com orome crypto enigm
  • system()函数属于C还是C++?

    include
  • 如何在.NET中创建和使用资源

    如何创建一个可以在程序的各个部分轻松引用和使用的资源 我的具体问题是我有一个 NotifyIcon 我想根据程序的状态更改其图标 这是一个常见问题 但我已经困扰了很长时间 好吧 在四处搜索并拼凑了 StackOverflow 周围的各个点之
  • Linq.Except 的更多“SQL 语法”

    Linq 中的大多数表达式都可以用两种语法编写 基本上 方法语法和类似 SQL 的语法 例如 方法语法 var results MySet Where n gt n Status State ACTIVE 类似 SQL 的语法 var re
  • 如何将选中的复选框(Aero 主题)渲染到 RenderTargetBitmap?

    我的复选框呈现时没有复选标记 如果我只使用一个复选框 实例对象 进行渲染 那么我可以显示复选标记 但我无法使用此解决方案 我需要能够使用本地复选框渲染它 此复选框通过 PresentationFramework Aero component
  • MySQL触发器中的多个if语句

    如果 MySQL 触发器中有多个 if 语句 最好的方法是什么 目前我的 SQL 如下所示 IF NOT NEW status lt gt OLD status THEN my sql ELSEIF NOT NEW actual lt gt
  • Internet Explorer 11:空白页内存泄漏?

    互联网浏览器 11 版本 11 0 9600 17280 更新版本 11 0 12 KB2977629 HTML 页面 测试方法 导航至页面 打开开发者工具 F12 切换到内存选项卡 开始分析会话 按住页面上的刷新按钮 F5 观察内存的爬升
  • 以编程方式调用 Pylint

    我想调用 Pylint 检查器 仅限于错误信号部分 作为我的单元测试的一部分 所以我检查了 Pylint 可执行脚本 找到了pylint lint Run助手类 在那里我迷失了很长一段时间 init 函数 以调用结束sys exit 有人尝
  • 将表结构复制到sqlite3中的新表

    有没有一种简单的方法将现有表结构复制到新表结构 不需要数据 只需要结构 gt 如 id INTEGER name varchar 20 Thx 你可以使用这样的命令 CREATE TABLE copied AS SELECT FROM my
  • Gio.MemoryInputStream 关​​闭时不会释放内存

    在 Windows 7 上运行 Python 3 4 Gio MemoryInputStream 的 close 函数不会释放内存 而它应该释放内存 测试代码是 from gi repository import Gio import os
  • 使用 ServiceStack.Text 作为 SignalR 的 JSON 序列化器

    为了在我的应用程序层中实现一致的序列化 我想对 SignalR 使用与我在其他地方使用的相同的序列化库 ServiceStack Text 在关注 SignalR 的 Wiki 时entry https github com SignalR
  • Redis:如何将“正常”集与排序集相交?

    假设我有一个集合 或者排序的集合或列表 如果这样会更好 A100 到 1000 个字符串 然后我有一个排序集B还有更多的字符串 比如说一百万 Now C应该是交集A and B 当然是弦乐 我想要拥有 X 所在的每个元组 X SCORE O
  • Java 8:比较不同类型列表的更有效方法?

    在单元测试中 我想验证两个列表是否包含相同的元素 要测试的列表是由以下列表构建的Person对象 其中一个类型字段String被提取 另一个列表包含String文字 人们经常会发现以下代码片段来完成此任务 请参阅这个答案 https sta
  • 有一些基本 R 解析器的代码吗?

    我正在寻找用于解析 R 代码的 Bison Flex 实现 以便我可以在 C 程序中使用它来实现使用 R 表达式的编程语言 我在谷歌上找不到任何可用的东西 除了这个 https github com halpo parser https g
  • Task.Delay 超过 int.MaxValue 毫秒

    最大持续时间aTask Delay可以告诉延迟的是int MaxValue毫秒 创建一个最干净的方法是什么Task哪个会延迟到那个时间之后 Fine await Task Delay TimeSpan FromMilliseconds in
  • Ruby:转义 unicode 字符串

    统一码字符串 string CEO Frye u2013 response to Capitalism discussion in Davos Vote aggressively with your wallet against firms
  • Maven:指向多个 jar 的系统依赖项

    是否可以在 pom 中定义一个依赖项 使其具有系统范围但指向多个 jar 我确信这很不正统 但是 我只是想知道这是否可能 所以像这样
  • Java封装概念不清楚

    这是基本问题 但我仍然不理解封装概念 我不明白我们如何更改其他类的类属性 因为每当 我们尝试设置类的公共实例值 我们必须创建该类的对象 然后设置值 每个对象引用不同的内存 所以即使我们改变 这不会影响任何其他对象的实例值 即使我尝试使用静态
  • 有没有办法通过添加带有情感的元素来增加特异性?

    我们有一个样式化的组件 当它编译时 它会添加一个类名 如下所示 div class app a class css hash link a div 这一切都很好 除了有人声明了类似于以下内容的 CSS 的情况 app a color red
  • bash getopts 具有多个强制选项

    是否可以使用 getopts 一起处理多个选项 例如 myscript iR 或 myscript irv 另外 我遇 到的情况是 基于条件脚本需要强制选项 例如 如果脚本的参数是一个目录 我将需要指定 R 或 r 选项以及任何其他选项 m