霍格沃兹测试开发学社

《Python测试开发进阶训练营》(随到随学!)
2023年第2期《Python全栈开发与自动化测试班》(开班在即)
报名联系weixin/qq:2314507862

测试工作常用 Linux/ Shell 命令之 Bash 逻辑控制基础

Shell 作为一门最常见的脚本语言,是测试工程师日常工作的重度依赖工具。相对 Python、Ruby 等其他脚本语言,Shell
就像一把趁手的军用匕首,轻量敏捷,是深入分析待测系统的利器,也是自动化能力的重要基础。呃...,也是测试工程师提高工作效率,节约时间,能提前下班约妹子逛街,陪老婆看娃的必要手段。

** 1. Shell 运行环境概念**


 * bash下还可以再重新启动一个shell,这个shell是sub shell(子shell),原shell会复  制自身给他。在sub shell中定义的变量,会随着sub shell的消亡而消失 * () 子shell中运行* $(ls) 表示执行ls后的结果,与``作用一致,不过可以嵌套* {} 当前shell中执行* $$ 当前脚本执行的pid* & 后台执行 * $!运行在后台的最后一个作业的PID(进程ID)

_ 实践展示:_

  • 如下操作步骤,查看当前bash的pid->开启另一个bash->查看pid->退出当前bash->再查看pid;我们会发现两个bash的pid不同,说明这是两个不同的运行环境

      *   *   *   *   *   *   *   *   * 
    

    $ echo $$ #查看当前bash的pid15493$ bash #开启另一个bash$ echo $$ #查看pid15514$ exit #退出当前bashexit$ echo $$ #再查看pid15493

  • 子 shell 与当前 shell

      *   *   *   *   *   *   * 
    

    $ a="当前shell"$ (a=1;echo $a;);echo $a #(表示在sub shell中运行)1当前shell$ { a=1;echo $a; };echo $a #{表示在当前shell中运行}11

  • 后台执行并调用


$ sleep 100&[2] 15851$ jobs[1]+  已停止               sleep 50[2]-  运行中               sleep 100 &$ fg 2sleep 100^Z[2]+  已停止               sleep 100$ bg 2[2]+ sleep 100 &$ jobs[1]+  已停止               sleep 50[2]-  运行中               sleep 100 &$


  


  
1. shell环境变量  
  
  


  


shell首先是一个工作环境,有很多变量可以供我们使用。例如:set可以获得当前的所有变量。

env可以获得可以传递给子进程的变量,export aa=bbbb 把私有变量导出  





      *   *   *   *   *   *   *   *   *   * 



$ vi ~/.bash_profile  
ANDROID_HOME=/Users/qinzhen/Library/Android/sdkexport PATH=$ANDROID_HOME/tools:$PATHexport PATH=$ANDROID_HOME/platform-tools:$PATHexport PATH=$ANDROID_HOME/tools/bin:$PATHexport JMETER_HOME=/Users/qinzhen/Documents/TestDev/apache-jmeter-5.1.1export PATH=$JMETER_HOME/bin:$PATHexport M3_HOME=/Users/qinzhen/Documents/TestDev/maven/apache-maven-3.6.1export PATH=$M3_HOME/bin:$PATH

2、shell输入输出


* Read 用来读取输入,并赋值给变量 * echo ,printf可以简单输出变量。* > file 将输出重定向到另一个文件 * >> 表示追加 等价于tee -a* < file 输入重定向* | 表示管道,也就是前一个命令的输出传入下一个命令的输入


  


  
3. 文件描述符  

输入文件—标准输入0 输出文件—标准输出1 错误输出文件—标准错误2  
使用 2>&1 >/tmp/tmp < /tmp/tmp

** _2. 条件 、分支 、循环用法

_**

由于平常测试工作中用到的几乎就是 if、for、while,所以这里也就只重点介绍这3种用法


* 条件 if* 分支 case* 循环 for while until select break 和 continue

1. if结构


* if [ condition ] ; then ...;fi* if [ condition ] ; then ...;else ...;fi * if [ condition ] ; then ...;elif ...;fi* 简单的逻辑可以使用 && || 去替代 * 条件可以用命令返回值代替

_ 部分展示_


 $ [ -e Allen_qin ]&&echo exist || echo not existexist$ [ -e Allen ]&&echo exist || echo not existnot exist

2. for 循环


for(( c1 ; c2 ; c3 )); do...; done  
for x in ${arr[*]};do echo $x;done

_ 实践展示_ :


$ for ((i=0;i<10;i++));do echo $i;done0123456789$ arr=(1 2 3 4)$ for((i=0;i<${#arr[*]};i++));do echo ${arr[$i]};done1234$ for x in ${arr[*]};do echo $x;done1234$ for x in `ls`;do echo $x;done11.sh3Allen_qinnginx.logtest$ ss="1 2 3"$ for x in $ss;do echo $x;done123


  


  
3. while循环  

* i=0;while [ $i -lt 3 ] ;do echo $i;((i=i+1));done* 一个有用的小技巧。一行行的读取文件内容 :while read line;do echo $line;done < /tmp/tmp

_ 实践展示_


 $ i=0;while [ $i -le 3 ];do echo $i;((i++));done0123$ cat while_testabcde$ while read line;do echo $line;done < while_testabcde

4. 退出控制


* return 函数返回* exit 脚本进程退出* break 退出当前循环* continue 跳过当前的循环,进入下一次循环

** _3.
来霍格沃兹测试开发学社,学习更多软件测试与测试开发的进阶技术,知识点涵盖web自动化测试 app自动化测试、接口自动化测试、测试框架、性能测试、安全测试、持续集成/持续交付/DevOps,测试左移、测试右移、精准测试、测试平台开发、测试管理等内容,课程技术涵盖bash、pytest、junit、selenium、appium、postman、requests、httprunner、jmeter、jenkins、docker、k8s、elk、sonarqube、jacoco、jvm-sandbox等相关技术,全面提升测试开发工程师的技术实力
QQ交流群:484590337
公众号 TestingStudio
点击获取更多信息

posted @ 2022-01-20 09:28  霍格沃兹测试开发学社  阅读(69)  评论(0编辑  收藏  举报