测试工作常用 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
点击获取更多信息
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了