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