在shell脚本中,我们也可以像其他编程语言一样处理传递的option以及对应的值,比如:
既支持 --name=<NAME>, 也支持 --name <NAME>, 那么如何才能做到呢?
看下面的例子:
[root@localhost ~]# cat test.sh
#!/bin/bash
name="Bingo"
while [ $# -gt 0 ];do
case $1 in
--name*)
if [[ $1 == --name\=* ]];then #如果option后面有等号,那么需要用#来截取变量$1获得对应的值,
name=${1#--name=}
else
name=$2 #如果option后面没有等号,那么后面的参数,也就是$2必然是option对应的值,因为没有用等号进行连接,所以需要用shift 来对位置参数进行移位处理;
shift
fi
;;
*)
args=$1
;;
esac
shift
done
echo Welcome.$name.$args
[root@localhost ~]# ./test.sh --name China
Welcome.China.
[root@localhost ~]# ./test.sh --name=China
Welcome.China.
[root@localhost ~]#
在这个例子中,通过判断传递的参数是否包含"=", 从而获取相应参数对应的参数值. 实现对传入参数以及参数值的获取。
这个使用技巧在系统中的很多shell脚本中都有体现,所以想提高shell 脚本的能力,多多阅读系统中的shell脚本吧,一定会有意外的收获哦。
网友评论