当前位置: 首页 > 知识库问答 >
问题:

linux - shell 脚本文件中如何处理多个选项参数?

刘成礼
2023-11-05

如下代码

# test.shwhile getopts "n:r:h" opt; do      case $opt in             n)                 nValue=$OPTARG                 ;;             r)                 rValue=$OPTARG;                 ;;             h)                  help                  exit 0                  ;;       esacdoneecho nValueexit 0

当我输入 ./test.sh -n -r 123 时, 控制台 nValue 的输出值为 -r ,既 -r 参数名称变成了 -n 参数的值,请问如何避免第二个参数的名称变成第一个参数的值这种情况?

共有2个答案

缪坚诚
2023-11-05

去掉 n 后面的 :
nr:h

解博明
2023-11-05

在你的 shell 脚本中,问题出在你在处理参数时没有正确地跳过 getopts 命令将参数分解为选项和值。在你的例子中,-n 选项的值被设置为了 -r,因为 -r 选项并没有跟随一个参数值。

你需要在输入 -r 选项时为其提供一个值。你可以通过在选项后面添加一个冒号来告诉 getopts 你期望的参数值。修改后的代码如下:

# test.shwhile getopts "n:r::h" opt; do      case $opt in             n)                 nValue=$OPTARG                 ;;             r)                 rValue=$OPTARG;                 ;;             h)                  help                  exit 0                  ;;       esacdoneecho nValue: $nValueecho rValue: $rValueexit 0

现在,当你输入 ./test.sh -n -r 123 时,它将正确地输出 nValue: -nrValue: 123。注意,getopts 允许为选项提供多个参数值。例如,如果你输入 ./test.sh -r 123 -r 456,那么 rValue 的值将是 123456

 类似资料:
  • 我如何纠正这一点?

  • 问题内容: 我正在尝试将一个大型xml文件拆分为多个文件,并在AWK脚本中使用了以下代码。 上面的代码生成一个名称为“ fileItem_1”,“ fileItem_2”,“ fileItem3”等的xml文件列表。 但是,我希望文件名类似于“ item_XXXXX”,其中XXXXX是XML内的一个节点-如下图所示 因此,基本上我希望“ id”节点为文件名。谁能帮我这个忙吗? 问题答案: 我不会用

  • 问题内容: 我在Linux上使用bash shell,并且要在shell脚本中使用10个以上的参数 问题答案: 使用花括号将其设置为关闭: 您还可以像这样遍历位置参数: 要么 要么

  • 问题内容: 如何在Linux中从C执行Shell脚本? 问题答案: 这取决于您要对脚本(或要运行的任何其他程序)执行的操作。 如果只想运行脚本,这是最容易的事情,但是它也做其他一些事情,包括运行shell并让其运行命令(在大多数* nix下是/ bin / sh)。 如果您要通过标准输入来输入shell脚本或使用其标准输出,则可以使用(和)设置管道。这也使用外壳程序(大多数* nix下是/ bin

  • 我想在shell脚本中使用十进制值,但它不起作用。我没有得到十进制值。很少有帖子建议使用linux的“bc”实用程序。但是在我的机器上没有安装“bc”,我没有安装任何实用程序的权限。现在可以在没有bc的情况下处理十进制值了。演示代码-: 输出-:

  • 问题内容: 我想在现有的CSV文件中添加一行标题,并在适当位置进行编辑。我怎样才能做到这一点? 我想结束 更改初始CSV输出不方便。 任何标准命令都可以。重要的是,文件已就地编辑,并且该行插入到文件的开头。 问题答案: 这将在文件的开头添加自定义文本: