zoukankan      html  css  js  c++  java
  • 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自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

     添加关注,让我们一起共同成长!

  • 相关阅读:
    System.Security.Cryptography.CryptographicException: 系统找不到指定的文件。
    AOP之三 Java平台研究
    c#中对"Crossthread operation not valid"错误的处理办法
    AOP之二 技术基础
    Fedora14安装Nvidia驱动的过程
    undefined reference问题总结
    深度解析VC中的消息传递机制
    DLL导出类方法
    VC++中把一个对话框最小化到托盘
    AOP之四 .Net平台研究
  • 原文地址:https://www.cnblogs.com/Wu13241454771/p/13571719.html
Copyright © 2011-2022 走看看