在bash脚本参数跟踪中

时间:2013-08-14 08:04:29

标签: bash

我在bash中有这个命令:

cmd -c -s junk text.txt 

如果我将命令更改为

cmd -c junk -s text.txt

如何跟踪哪个参数($2$3)设置为junk

我尝试使用for循环,但我不知道如何从junk找到$@

2 个答案:

答案 0 :(得分:1)

您需要在脚本中使用getopts。这样的事情应该有效:

while getopts "c:s:" optionName; do
   case "$optionName" in
   s) arg="$OPTARG"; echo "-s is present with [$arg]";;
   c) arg="$OPTARG"; echo "-c is present with [$arg]";;
   esac
done

答案 1 :(得分:0)

从您显示的示例中,-s选项似乎只有一个参数,在第一个示例中为junk。然而,在第二个例子中,语义似乎发生了变化,显然-c只接受一个参数,它再次是junk。同样在第二个示例中,似乎-stext.txt作为参数。

通常,bash命令中的参数没有固定位置,但如果选项接受参数,则应直接遵循option参数(在第一种情况下为-s)。

正如anubhava所指出的,您可以使用getopts来解析脚本的参数。这仍然不适用于你改变整个语义的情况。