2018-09-06|2018-09-06 shell中脚本参数传递的两种方式
转:https://blog.csdn.net/sinat_36521655/article/details/79296181方式一:$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.sh12
#shell中将会输出:
【2018-09-06|2018-09-06 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 bcd 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文件
whilegetopts":a:b:c:"opt
do
case$optin
a)
echo"参数a的值$OPTARG"
;
;
b)
echo"参数b的值$OPTARG"
;
;
c)
echo"参数c的值$OPTARG"
;
;
?)
echo"未知参数"
exit1;
;
esac
done
用一个while循环加case分支获取不同参数,:a:b:c相当于定义参数的变量名,有时候可能会有未知参数,所以增加一个?的分支。
在shell中执行脚本,结果如下
$ ./test.sh -a1-b2-c3
#在shell中的输出
参数a的值1
参数b的值2
参数c的值3
$ ./test.sh -a1-c3
#在shell中的输出
参数a的值1
参数c的值3
$ ./test.sh -a1-c3-d4
#在shell中的输出
参数a的值1
参数c的值3
未知参数
优点:由于使用了-a加参数值的方式进行一一匹配,所以不会参数匹配错误,同时也可以缺省参数,并不会导致参数错误,同时也便于后期参数的扩展和移植
缺点:脚本执行时参数需要的输入会增多
总结:推荐使用getopts的方式进行参数传递
---------------------本文来自 随风丶逆风 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/sinat_36521655/article/details/79296181?utm_source=copy
推荐阅读
- 热闹中的孤独
- Shell-Bash变量与运算符
- JS中的各种宽高度定义及其应用
- 2021-02-17|2021-02-17 小儿按摩膻中穴-舒缓咳嗽
- 深入理解Go之generate
- 异地恋中,逐渐适应一个人到底意味着什么()
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- “成长”读书社群招募
- 2020-04-07vue中Axios的封装和API接口的管理