如下代码
# 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
参数的值,请问如何避免第二个参数的名称变成第一个参数的值这种情况?
去掉 n
后面的 :
:nr:h
在你的 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: -n
和 rValue: 123
。注意,getopts 允许为选项提供多个参数值。例如,如果你输入 ./test.sh -r 123 -r 456
,那么 rValue 的值将是 123
和 456
。
我如何纠正这一点?
问题内容: 我正在尝试将一个大型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输出不方便。 任何标准命令都可以。重要的是,文件已就地编辑,并且该行插入到文件的开头。 问题答案: 这将在文件的开头添加自定义文本: