Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Bash多个命令行参数_Arrays_Linux_Bash_If Statement - Fatal编程技术网

Arrays Bash多个命令行参数

Arrays Bash多个命令行参数,arrays,linux,bash,if-statement,Arrays,Linux,Bash,If Statement,我希望能够使用一个或多个参数运行脚本,并对传递的所有参数执行操作 到目前为止,我已经能够根据第一个参数运行命令,如下所示: #/bin/bash ap=admin lp=lender if [[ "$1" = "ap" ]]; then echo "### pulling $ap ###" elif [[ "$1" = "lp" ]]; then echo "### pulling $lp ###" else echo "There is no service with t

我希望能够使用一个或多个参数运行脚本,并对传递的所有参数执行操作

到目前为止,我已经能够根据第一个参数运行命令,如下所示:

#/bin/bash

ap=admin
lp=lender

if [[ "$1" = "ap" ]]; then
    echo "### pulling $ap ###"
elif [[ "$1" = "lp" ]]; then
    echo "### pulling $lp ###"
else 
echo "There is no service with that name"
fi
我希望能够使用多个参数运行脚本,如下所示,并运行每个参数所需的命令。例如,如果我运行以下命令:

./update.sh ap lp
我希望能够同时检测ap和lp,然后执行正确的命令

总而言之,如果运行脚本的人将'ap'作为参数传递,我希望拉取admin;如果用户同时将'ap'和'lp'作为参数传递,我希望拉取admin和lender


提前感谢您的帮助

使用
while
循环查看参数,并使用
shift
将参数$N+1移动到$N。因此,在
shift
之后,第二个参数成为第一个参数

while [ "$#" -gt 0 ]
do
  if [[ $1 = "ap" ]]
  then
    echo "AP typed"
  elif [[ $1 = "lp" ]]
  then
    echo "LP typed"
  fi
  shift
done
这将接受按每个顺序排列的参数

 $ ./update lp ap
 $ ./update ap lp
 $ ./update lp
 $ ./update ap

在这里可以看到一种非常可读、可维护、可扩展、基于标准的方法。。。不过,实际上检查
$1
的值,而不是简单地用
“$1”
eval“$1”
之类的东西来执行它,这是值得称赞的。如果
$1
与预期的命令匹配,那么移位次数就太多了。将case语句后面的
shift
移动到
*
案例中,或者从
ap
lp
中删除对
shift
的调用。
 $ ./update lp ap
 $ ./update ap lp
 $ ./update lp
 $ ./update ap