Shell 编程核心技术《三》
欢迎关注【无量测试之道】公众号,回复【领取资源】,
Python编程学习资源干货、
Python+Appium框架APP的UI自动化、
Python+Selenium框架Web的UI自动化、
Python+Unittest框架API自动化、
资源和代码 免费送啦~
文章下方有公众号二维码,可直接微信扫一扫关注即可。
今天将分享如何来具体编写一个 Shell 脚本,并掌握编写 Shell 脚本的必备知识。
想要编写一个 Shell 脚本,需要的必备知识:
1、 首先需要掌握的是注释,注释以 # 开头,用于增加脚本可读性;
2、 其次是参数,我们需要给脚本传入参数并解析它;
3、 最后是函数封装,以及掌握脚本是如何执行和调试的。
注释
1、首先我们来看下注释:
使用vim创建一个文件,当然你也可以使用 vs code 等其他编辑器,vs code 可以支持语法高亮,也是非常不错的,输入 vim /tmp/test_001.sh 指令创建了 test_001.sh 文件。
2、接下来开始编写脚本:
按i键进入编辑模式,并输入注释 # this is a test script! 用来告诉大家这个脚本是干什么的,当然注释不是必需的,只是为了增加可读性,同时Shell也不会执行注释语句。
参数
当脚本开始执行,就需要我们掌握系统默认的参数解析规则。当传递一个参数给脚本时,它是怎样被解析的呢?
1、$0 表示被执行的程序,也就是当前脚本;
2、$1、$2 分别表示传递的第 1 个和第 2 个参数,Shell 默认只支持 9 个参数,如果你需要支持更多的参数可以使用 shift;
3、$@、$* 表示所有的参数,但不包含 $0;
4、${#*}、${#@} 表示参数的个数;
5、${*:1:3}、${*:$#} 表示不同参数的值。
解释说明:
001、$@与$*的区别如下:
使用命令:sh /tmp/test_difference.sh执行结果如下:
可以看到不加引号时,二者都是返回传入的参数,但加了引号后,
此时$*把参数作为一个字符串整体(单字符串)返回,
$@把每个参数作为一个字符串返回
002、${#*}与${#@}的用法如下:
执行结果如下:
从结果可知二者都是表示参数的个数
003、${*:1:3}、${*:$#}的用法如下:
如上图所示,可知:${*:1:3}表示取的是前3个参数的值,${*:$#}表示所有参数中最后一个参数的值。
下面继续编写脚本:
如图所示,并打印 a0=$0、a1=$1 a2=$2,以及 $@ 和 $*。
执行脚本我使用的命令是:sh /tmp/test_001.sh,在执行结果中 $0 是当前的文件名,但此时参数没有值,参数个数为空。
我们输入参数 a,b 传递给脚本,可以看到输出结果中第一个参数是 a,第二个参数是 b,这就是参数的解析规则。
函数
最后是函数,函数是以函数名()后跟 {} 括起来的结构内容组成,函数可以实现一些功能封装,同时函数也支持与脚本类似的参数解析逻辑。
如上图所示,定义一个名为:helloworld的 函数,在函数中通过 if 语句判断第一个参数 $1 是否等于 python,如果等于就打印 python auto tester。然后调用helloworld 函数,并传入一个名为:python的参数,系统打印输出 python auto tester。
我们还可以把上面直接在命令行输入的函数稍微封装一下,放入shell脚本的函数中并进行调用,通过 elif 判断 $1 是否等于 java,如果等于 java 就打印 java auto tester。
调用函数的执行结果如下:
执行并传入 python 参数,你可以看到最终打印了 python auto tester。
如果传入参数为:java时,则打印输出:java auto tester
备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:
添加关注,让我们一起共同成长!