Linux bash 中的跳过参数

Linux bash 中的跳过参数

我需要编写一个处理 3 个参数($1 $2 和 $3)的 shell 脚本。在 bash 中,我必须跳过参数 2(我实际上编写了类似 ./script.sh para1 para3 的内容)。

脚本没问题。但我不能跳过第二个参数。我该如何跳过这个参数?

答案1

最后我找到了它:

./script.sh "para1" "" "para3"

我的老师应该对此感到高兴。他不会从我这里得到任何其他东西。

答案2

没有什么比随心所欲地跳过更重要的了。参数只是编号而已,如果没有第二个参数,那么……好吧,实际上没有第三个参数。因此,要么明确给出一个空字符串作为第二个参数(如果您的练习允许这样做),要么检查给出的参数数量,如果是两个,则将第二个参数作为第三个参数(因为这是学校作业,我不会在这里详细介绍,只需查看 shell 手册$#中对特殊变量的描述即可)。

答案3

正确使用它取决于上下文,从你的问题中看不清楚。但重命名参数的命令是shift

$ help shift

shift: shift [n]
    Shift positional parameters.

    Rename the positional parameters $N+1,$N+2 ... to $1,$2 ...  If N is
    not given, it is assumed to be 1.

您可能会在循环中使用它来处理一组参数。您可以将第一个参数处理为 $1,然后shift 2第三个参数将是 $1。

对于真正复杂的命令您可能还会使用,getopts这就是您将使用的参数,例如./command --foo blah --bar asdf

答案4

您可以检查第三个参数是否存在。如果参数为空或非空,则-zand运算符会成功返回。 此外,在整个脚本中,请使用变量而不是编号参数。-n
para?

para1=$1
if [ -z "$3" ]
then
    para3=$2
else
    para2=$2
    para3=$3
fi

相关内容