我需要编写一个处理 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
您可以检查第三个参数是否存在。如果参数为空或非空,则-z
and运算符会成功返回。 此外,在整个脚本中,请使用变量而不是编号参数。-n
para?
para1=$1
if [ -z "$3" ]
then
para3=$2
else
para2=$2
para3=$3
fi