详解shell中脚本参数传递的两种⽅式
⽅式⼀:$0,$1,$2..
采⽤$0,$1,$2..等⽅式获取脚本命令⾏传⼊的参数,值得注意的是,$0获取到的是脚本路径以及脚本名,后⾯按顺序获取参数,当参数超过10个时(包括10个),需要使⽤${10},${11}....才能获取到参数,但是⼀般很少会超过10个参数的情况。
1.1 ⽰例:新建⼀个test.sh的⽂件
#!/bin/bash
echo "脚本$0"
echo "第⼀个参数$1"
echo "第⼆个参数$2"
在shell中执⾏脚本,结果如下
$ ./test.sh 1 2
#shell中将会输出:
脚本./test.sh
第⼀个参数1
第⼆个参数2
1.2 下⾯是参数超过10个的情况,在test.sh⽂件写⼊
#!/bin/bash
echo "脚本名$0"
echo "第⼀个参数$1"
echo "第⼆个参数$2"
echo "第三个参数$3"
echo "第四个参数$4"
…
…
echo "第⼗个参数$10"
echo "第⼗个参数${10}"
在shell中执⾏脚本,结果如下
$ ./test.sh a b c d e f g h i j
#shell中将会输出:
脚本名./test.sh
第⼀个参数a
第⼆个参数b
第三个参数c
第四个参数d
第五个参数e
第六个参数f
第七个参数g
第⼋个参数h
第九个参数i
第⼗个参数a0
第⼗个参数j
可以看到${10}正确读取到了第⼗个参数,⽽$10被分成$1读取到第⼀个参数a然后拼接字符串0,于是输出a0。
优点:获取参数更容易,执⾏脚本时需要的输⼊少
缺点:必须按照顺序输⼊参数,如果中间漏写则参数对应就会错误
⽅式⼆:getopts
语法格式:getopts [option[:]] [DESCPRITION] VARIABLE
option:表⽰为某个脚本可以使⽤的选项
":":如果某个选项(option)后⾯出现了冒号(":"),则表⽰这个选项后⾯可以接参数(即⼀段描述信息DESCPRITION)VARIABLE:表⽰将某个选项保存在变量VARIABLE中
2.1 ⽰例:同样新建⼀个test.sh⽂件
while getopts ":a:b:c:" opt
do
case $opt in
a)
echo "参数a的值$OPTARG"
;;
b)
echo "参数b的值$OPTARG"
;;
c)
echo "参数c的值$OPTARG"
;;
)
echo "未知参数"
exit 1;;
esac
done
⽤⼀个while循环加case分⽀获取不同参数,:a:b:c相当于定义参数的变量名,有时候可能会有未知参数,所以增加⼀个?的分⽀。
在shell中执⾏脚本,结果如下
$ ./test.sh -a 1 -b 2 -c 3
#在shell中的输出
参数a的值1
参数b的值2
参数c的值3
$ ./test.sh -a 1 -c 3
#在shell中的输出
参数a的值1
参数c的值3
$ ./test.sh -a 1 -c 3 -d 4
#在shell中的输出
参数a的值1
参数c的值3
未知参数
优点:由于使⽤了-a加参数值的⽅式进⾏⼀⼀匹配,所以不会参数匹配错误,同时也可以缺省参数,并不会导致参数错误,同时也便于后期参数的扩展和移植
缺点:脚本执⾏时参数需要的输⼊会增多
总结:推荐使⽤getopts的⽅式进⾏参数传递
⽅式三:声明变量直接引⽤
先在test1.sh脚本中声明变量AA BB CC DD
AA=11
BB=22
shell代码CC=33
DD=44
在test2.sh脚本中引⽤变量AA BB CC并打印
echo $AA $BB $CC $AA
注意:执⾏脚本的时候使⽤(. 脚本名)可以引⽤脚本外声明的变量,使⽤(sh 脚本名)不能引⽤局部之外的变量
到此这篇关于详解shell中脚本参数传递的两种⽅式的⽂章就介绍到这了,更多相关shell脚本参数传递内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论