Shell 命令之 Bash 逻辑控制基础

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

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

1. Shell 运行环境概念

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


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


实践展示:

  • 如下操作步骤,查看当前bash的pid->开启另一个bash->查看pid->退出当前bash->再查看pid;我们会发现两个bash的pid不同,说明这是两个不同的运行环境
<code>$ echo $$    #查看当前bash的pid15493$ bash      #开启另一个bash$ echo $$    #查看pid15514$ exit       #退出当前bashexit$ echo $$    #再查看pid15493/<code>
  • 子 shell 与当前 shell
<code>$ a="当前shell"$ (a=1;echo $a;);echo $a    #(表示在sub shell中运行)1当前shell$ { a=1;echo $a; };echo $a  #{表示在当前shell中运行}11/<code>
  • 后台执行并调用
<code>$ 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 &$/<code>
<code>1. shell环境变量shell首先是一个工作环境,有很多变量可以供我们使用。例如:set可以获得当前的所有变量。env可以获得可以传递给子进程的变量,export aa=bbbb 把私有变量导出/<code>


<code>$ vi ~/.bash_profileANDROID_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:$PATH2、shell输入输出/<code>
<code>* Read 用来读取输入,并赋值给变量 * echo ,printf可以简单输出变量。* > file 将输出重定向到另一个文件 * >> 表示追加 等价于tee -a* < file 输入重定向* | 表示管道,也就是前一个命令的输出传入下一个命令的输入/<code>
<code>3. 文件描述符/<code>
<code>输入文件—标准输入0 输出文件—标准输出1 错误输出文件—标准错误2使用 2>&1 >/tmp/tmp < /tmp/tmp/<code>


2. 条件 、分支 、循环用法

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

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


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

1. if结构

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

部分展示

<code>$ [ -e Allen_qin ]&&echo exist || echo not existexist$ [ -e Allen ]&&echo exist || echo not existnot exist/<code>

2. for 循环

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

实践展示

<code>$ for ((i=0;i<10;i++));do echo $i;done0123456789$ arr=(1 2 3 4)$ for((i=0;i/<code>
<code>3. while循环/<code>
<code>* i=0;while [ $i -lt 3 ] ;do echo $i;((i=i+1));done* 一个有用的小技巧。一行行的读取文件内容 :while read line;do echo $line;done < /tmp/tmp/<code>

实践展示

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

4. 退出控制

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



分享到:


相關文章: