如何在 bash 中使用 getopts 的示例

2023-12-12

我想打电话myscript文件以这种方式:

$ ./myscript -s 45 -p any_string

or

$ ./myscript -h  #should display help
$ ./myscript     #should display help

我的要求是:

  • getopt在这里获取输入参数
  • 检查一下-s存在,如果不存在返回错误
  • 检查后面的值-s是 45 或 90
  • 检查是否-p存在并且后面有一个输入字符串
  • 如果用户输入./myscript -h要不就./myscript然后显示帮助

到目前为止我尝试过这段代码:

#!/bin/bash
while getopts "h:s:" arg; do
  case $arg in
    h)
      echo "usage" 
      ;;
    s)
      strength=$OPTARG
      echo $strength
      ;;
  esac
done

但使用该代码我会收到错误。如何使用 Bash 和getopt?


#!/bin/bash

usage() { echo "Usage: $0 [-s <45|90>] [-p <string>]" 1>&2; exit 1; }

while getopts ":s:p:" o; do
    case "${o}" in
        s)
            s=${OPTARG}
            ((s == 45 || s == 90)) || usage
            ;;
        p)
            p=${OPTARG}
            ;;
        *)
            usage
            ;;
    esac
done
shift $((OPTIND-1))

if [ -z "${s}" ] || [ -z "${p}" ]; then
    usage
fi

echo "s = ${s}"
echo "p = ${p}"

运行示例:

$ ./myscript.sh
Usage: ./myscript.sh [-s <45|90>] [-p <string>]

$ ./myscript.sh -h
Usage: ./myscript.sh [-s <45|90>] [-p <string>]

$ ./myscript.sh -s "" -p ""
Usage: ./myscript.sh [-s <45|90>] [-p <string>]

$ ./myscript.sh -s 10 -p foo
Usage: ./myscript.sh [-s <45|90>] [-p <string>]

$ ./myscript.sh -s 45 -p foo
s = 45
p = foo

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

如何在 bash 中使用 getopts 的示例 的相关文章

  • 在bash中,是否有相当于“错误消息”的东西

    在 perl 中 您可以使用错误消息退出die some msg bash 中是否有等效的单个命令 现在 我正在使用命令来实现这一点 echo some msg exit 1 你可以很容易地自己推出 die echo 1 gt 2 exit
  • 如何使用我在 github 中发布的 bash 脚本执行 chsh?

    我有一个要点 我总是用它来在新服务器上安装我需要的软件包 http gist github com 4372049 http gist github com 4372049 我需要做的就是通过 ssh 在新服务器中输入以下内容 bash c
  • 从 Amazon S3 存储桶下载文件的脚本

    尝试编写脚本以从 Amazon S3 存储桶下载文件 cURL 网站上的示例遇到问题 下面的脚本产生 我们计算的请求签名与您的签名不匹配 假如 检查您的密钥和签名方法 感谢任何帮助 bin sh file filename php buck
  • 使用带有curl 的内部字段分隔符

    当我做 ls IFS l 我得到了我期望的输出 当我做 curl IFShttp www google com 我不 我是否误解了内部字段分隔符 如何在不使用任何空格字符的情况下运行curl 命令 您需要将变量放在大括号内 否则 shell
  • ReferenceError:MongoDB shell 中未定义 require

    我尝试通过 Windows 命令 Windows 8 1 从 Mongo 客户端连接 MongoDB 当我使用require 在 javascript 中 我遇到如下错误 有人有同样的问题吗 我有错过任何一个吗require有关的npm安装
  • 从 PL/SQL 调用 shell 脚本,但 shell 以 grid 用户而非 oracle 身份执行

    我正在尝试使用 Runtime getRuntime exec 从 Oracle 数据库内部执行 shell 脚本 在 Red Hat 5 5 上运行的 Oracle 11 2 0 4 EE CREATE OR REPLACE proced
  • 在 bash 中使用单个命令为 shell 变量分配默认值

    我对 bash 3 00 shell 脚本中的变量进行了大量测试 如果未设置变量 则它会分配默认值 例如 if z VARIABLE then FOO default else FOO VARIABLE fi 我似乎记得有一些语法可以在一行
  • 语法错误:for 循环变量不正确

    我正在尝试编写一个可以在后台调高收音机音量的脚本 bin sh for i 80 i lt 101 i do amixer cset numid 1 i sleep 60 done 但我有问题 alarmclock vol sh 3 ala
  • .profile 无法从 Mac 终端运行

    我有一个 profile 文件 我正在终端中读取并使用别名 但在某些时候 别名由于没有明确的原因而停止工作 其他命令仍在工作 为了快速修复 我删除了 rm 并在用户目录中重新创建了 profile 文件 我可以看到 至少在该目录中没有 ba
  • git 别名中的 AWK 语句

    我正在尝试创建一个 git 别名来以特定格式打印日志中的所有拉取请求 但是 我在使用 AWK 删除双空格时遇到问题 这是使用以下命令的 git log 的输出 git log merges grep pull request pretty
  • shell脚本中的\r字符

    我在尝试执行 shell 脚本时收到以下错误 r command not found line 2 请提出同样的解决方案 以下是脚本中使用的初始行 bin sh if lt 1 then echo ERROR Environment arg
  • 如何在 shell 脚本中并行运行多个实例以提高时间效率[重复]

    这个问题在这里已经有答案了 我正在使用 shell 脚本 它读取 16000 行的输入文件 运行该脚本需要8个多小时 我需要减少它 所以我将其划分为 8 个实例并读取数据 其中我使用 for 循环迭代 8 个文件 并在其中使用 while
  • Pure Bash 替换捕获组

    我有这个示例字符串 test string 13A6 该字符 数字可以是从 0 到 9 以及从 A 到 F 我想要这个输出 1 3 A 6 我有这个工作 result echo test string sed s g 我想在没有 sed 的
  • 如何执行“sudo nvm”?

    在我的 Mac 上 我想将一些需要 su 权限的包迁移到另一个节点版本 我使用 homebrew 安装 nvm 现在我需要执行 sudo nvm 或 reinstall packages将失败 me MacBook sudo nvm sud
  • jq:将对象数组转换为对象

    我收到了来自curl的回复 格式如下 list value 1 id 12 value 15 id 13 value 4 id 14 给定 id 之间的映射 如下所示 12 newId1 13 newId2 14 newId3 我想做这个
  • 对目录中的所有文件执行命令

    有人可以提供执行以下操作的代码 假设有一个文件目录 所有这些文件都需要通过程序运行 该程序将结果输出到标准输出 我需要一个脚本 该脚本将进入一个目录 对每个文件执行命令 并将输出连接到一个大输出文件中 例如 要在 1 个文件上运行命令 cm
  • 如何从 Artifactory 存储库下载最新的工件?

    我需要来自存储库的最新工件 例如快照 人工工厂 http en wikipedia org wiki Software repository Repository managers 该工件需要通过脚本复制到服务器 Linux 我有什么选择
  • 从 php 执行 bash 脚本并立即输出回网页

    我有一组 bash 和 Perl 脚本 开发在 Linux Box 上部署所需的目录结构 可选 从svn导出代码 从这个源构建一个包 这在终端上运行良好 现在 我的客户请求此流程的 Web 界面 例如 某些页面上的 创建新包 按钮将一一调用
  • 从 shell 命令调用 SOAP 请求

    我使用curl 向Web 服务发送SOAP 请求 并使用shell 脚本获取响应 请在下面找到我正在使用的命令 curl H Content Type text xml charset utf 8 H SOAPAction d sample
  • 使用 sh 运行 bash 脚本

    我有 bash 脚本 它需要 bash 另一个人尝试运行它 sh script name sh 它失败了 因为 sh 是他的发行版中 dash 的符号链接 ls la bin sh lrwxrwxrwx 1 root root 4 Aug

随机推荐

  • 解释 C 预处理器代码

    Given define LOG OBJECT object NSLog object d object description NSString stringWithUTF8String FILE lastPathComponent LI
  • 用户目前在哪个国家?

    我在 stackoverflow 和 Google Groups 上浏览了一下 但还没有真正找到这个确切问题的答案 我只是想知道什么countryAndroid 手机的用户当前处于 我假设如果用户仅使用 wifi TelephonyMana
  • 代理不适用于生产中的 create-react-app

    我正在使用reactjs 创建反应应用程序 创建仪表板应用程序 在我的应用程序中 我正在调用多个主机 为此 我在 package json 中配置了多个代理以避免 CORS ex www app demo1 com www app demo
  • Xslt - 以块的形式迭代节点

    我有一个现有的 xslt 脚本 它使用 FOP 创建 PDF 问题是当节点计数超过一定限制时 在特定节点类型上执行 apply template 时内存不足 为了解决内存问题 我需要将从该模板调用得出的结果分解为几个
  • 将形状不等的数组列表转换为 Tensorflow 2 数据集:ValueError:无法将非矩形 Python 序列转换为 Tensor

    我以列表的形式标记了数据形状不均 arrays array array 1179 6 208 2 1625 92 9 3870 3 2136 435 5 2453 2180 44 1 226 166 3 4409 49 6728 10 17
  • 识别字符串中是否存在 URL

    您好 有人可以帮我使用 PHP 识别字符串中是否存在 url 吗 我想输入完整的字符串 即 嗨 请访问http domain com 12345今天 并删除完整的 url 而不仅仅是域名 Thanks 你可能想要这样的东西 RegEx Gu
  • 是否有理由在 JavaScript 条件中编写“if (myBoolean == true)”?

    许多初学者程序员会写类似的东西if myBoolean true 相对于if myBoolean 因为他们还没有意识到条件不需要包含比较 而只需包含布尔值 当我在 Twitter 上注意到这一点时 有人向我建议 在 JavaScript 中
  • 防止从 iCloud 中的应用程序备份

    The way apple storage guidelines is creating more problem for me because most of the data i am maintaining from the Docu
  • PHP递归获取字符串的所有可能性

    这是我获得所有可能性的代码 seq 1 d seq 2 f seq 3 w seq 4 s for i 1 i lt 5 i s length 1 seq i c1 for i2 i 1 i2 lt 5 i2 s length 2 seq
  • VB.NET 图片框之间的碰撞

    我正在尝试制作一个简单的游戏 我需要知道 picturebox1 我的角色 是否与其他 picturebox 墙壁 发生碰撞 我已经弄清楚了如何做到这一点 但它仅适用于我的角色和其他 1 个图片框 例如 If picturebox1 bou
  • 在模态中将 Jquery 变量传递给 php

    我正在打印图片和姓名 在网格视图中 用户将能够单击图片或名称 这将打开一个模式 其中包含所单击的图片 名称的标题 将相同
  • javascript/jQuery setInterval/clearInterval

    我正在使用 setInterval 来检查 p html 段落 是否具有特定的文本值 如果有的话我想清除间隔并继续代码流 我在 jQuery 插件中使用它 所以如果段落有 tat 文本值 我想清除间隔 然后继续使用回调函数 所以我尝试了这样
  • 如何在 DB2 中查找表的主键的名称和值

    如何找到表的主键列名和值 我尝试在 SYSCAT 表中查找 但找不到任何相关内容 这应该为您提供大型机上所需的内容 http publibz boulder ibm com cgi bin bookmgr OS390 BOOKS DSNSQ
  • 扩展 woocommerce Rest api

    我想扩展 woocommerce Rest api 以包含其 预订 扩展插件的数据 目前此扩展没有其余 api 提供的默认端点 到目前为止 我已经创建了一个插件 并添加了以下代码 add filter woocommerce rest pr
  • 获取 Recycler View 上单击的项目的位置

    我已经实施了RecyclerView而且效果很好 我有一个ArrayList其中包含回收器视图的数据 每个项目的布局都很复杂 它包含两个frameLayout Framelayout1 包含一个图像和一个文本 framelayout2 包含
  • 不允许使用 HTTP 动词 POST 来访问路径“/”

    整个错误 Server Error in Application The HTTP verb POST used to access path is not allowed Description An unhandled exceptio
  • 多处理时在哪里调用 join()

    在 Python 中使用多处理时 我通常会看到以下示例 join 函数在每个进程实际创建的单独循环中调用 例如 这个 processes for i in range 10 p Process target my func processe
  • 如何找到数组中的第一个空闲键

    我们都知道 数组实际上是 PHP 中的有序树 鉴于此 数组索引 整数键 不需要遵循任何严格的顺序 甚至根本不需要存在 所以 给定一个像这样的数组 array 1 gt A 5 gt B 2 gt C 3 gt D 6 gt E 0 gt F
  • 一旦超出索引,C# 将数组索引值循环回数组开头

    我希望创建一个如下所示的程序 c 顺便说一句 int arr new int 9 some code that puts values 1 0 or 2 in each array element for int i 0 i lt arr
  • 如何在 bash 中使用 getopts 的示例

    我想打电话myscript文件以这种方式 myscript s 45 p any string or myscript h should display help myscript should display help 我的要求是 get