Shell脚本(一)_shell脚本中will,2024年最新2024软件测试开发社招面试解答之性能优化

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注软件测试)
img

正文

一个脚本的预设变量数量是没有限制的,另外还有$0,它表示脚本本身的名字

vim option1.sh #写入下面内容

#!/bin/bash
echo “$1 $2 $0”

sh option1.sh 1 2

1 2 option1.sh #可以看到,显示出$0为option1.sh,即脚本名字


20.3 Shell脚本中的逻辑判断

如果你学过其它编程语言,那么就不会对if感到陌生。在shell脚本中,我们同样可以使用if逻辑判断。


不带else

具体格式如下:

if 判断语句;then
command
fi

下面自定义一个脚本:

vim if1.sh #写入下面内容

#!/bin/bash

read -p "Please input your score: " a
if ((a<60));then
echo “You didn’t pass the exam.”
fi

上面出现了((a<60))这样的形式,(( ))这是shell脚本特有的格式,只用一个小括号或不用括号都会报错,要记住这个格式。

查看上面脚本的执行结果:

sh if1.sh

Please input your score: 90 #没有设置else条件,所以没有结果

sh if1.sh

Please input your score: 50
You didn’t pass the exam.


带有else

具体格式如下:

if 判断语句
then
command
else
command
fi

下面做if1.sh脚本做修改:

vim if1.sh #修改为下面内容

#!/bin/bash

read -p "Please input your score: " a
if ((a<60));then
echo “You didn’t pass the exam.”
else
echo “Good!You passed the exam.”
fi

执行上面脚本:

sh if1.sh

Please input your score: 90
Good!You passed the exam. #设置了else条件之后,这里返回了结果

sh if1.sh

Please input your score: 50
You didn’t pass the exam.


带有elif

具体格式如下:

if 判断语句1;then
command
elif 判断语句2;then
command
else
command
fi

下面自定义一个脚本:

vim if2.sh #写入下面内容

#!/bin/bash

read -p "Please input you score: " a
if ((a<60));then
echo “You didn’t pass the exam.”
elif ((a>=60)) && ((a<90));then # elif相对if,再做一次判断
echo “Good!You passed the exam.”
else
echo “Very good!Your score is very high.”
fi

上面的 &&表示“并且”,另外还有||表示“或者”

执行上面脚本:

sh if2.sh

Please input you score: 40
You didn’t pass the exam.

sh if2.sh

Please input you score: 85
Good!You passed the exam.

sh if2.sh

Please input you score: 95
Very good!Your score is very high.

判断数值大小除了可以使用(( ))的形式外,还可以使用[],但不能使用><=这样的符号了,要使用-lt(小于)、-gt(大于)、-le(小于或等于)、-ge(大于或等于)、-eq(等于)、-ne(不等于)

示例如下:

a=10; if [ $a -lt 1 ] || [ $a -gt 5 ]; then echo ok; fi #注意[]空格,否则会有语法错误

ok

a=5; if [ $a -lt 10 ] || [ $a -gt 1 ]; then echo ok; fi

ok


和文档相关的判断

shell脚本中if还经常用于判断文档的属性,比如判断是普通文件还是目录,判断文件是否可读、写、执行权限等。

if 常用的选项有以下几个:

-e :判断文件或目录是否存在
-d :判断是不是目录以及是否存在
-f :判断是不是普通文件以及是否存在
-r :判断是否有读权限
-w :判断是否有写权限
-x :判断是否有执行权限

具体格式如下:

if [ -e filename ]
then
command
fi

示例如下:

if [ -d /home/ ]; then echo ok; fi

ok

if [ -f /home/ ]; then echo ok; fi

/home/是目录而非文件,所以在判断它是否为文件时并不会显示ok。

if [ -f /root/test.txt ]; then echo ok; fi

ok

if [ -r /root/test.txt ]; then echo ok; fi

ok

if [ -w /root/test.txt ]; then echo ok; fi

ok

if [ -x /root/test.txt ]; then echo ok; fi

if [ -e /root/test123.txt ]; then echo ok; fi


case逻辑判断

在shell脚本中,除了使用if来判断逻辑外,还可以使用case。

具体格式如下:

case 变量 in
value1)
command
;;
value2)
command
;;
value3)
command
;;
*)
command
;;
esac

上面的结构中,不限制value的个数,*代表其它任意值

下面自定义一个脚本:

vim case.sh

#!/bin/bash

read -p "Input a number: " n
a=$[n%2]
case $a in
1)
echo “The number is odd.” # odd:奇数
;;
0)
echo “The number is even.” # even:偶数
;;
*)
echo “It’s not a number!”
esac

脚本中的$a的值为1或0,执行结果如下:

sh case.sh

Input a number: 100
The number is even.

sh case.sh

Input a number: 13
The number is odd.

case脚本常用于编写系统服务的启动脚本


20.4 Shell脚本中的循环

shell脚本算是一门简易的编程语言了,脚本中的循环也是不能缺少的。常用的循环有for循环和while循环。


for循环

for循环结构是在日常运维工作中使用很频繁的循环结构。

具体格式如下:

for 变量名 in 循环的条件
do
command
done

下面自定义一个脚本:

vim for.sh #写入下面内容

#!/bin/bash

for i in seq 1 5; do # seq 1 5 表示从1到5的一个序列
echo $i
done

查看执行结果:

sh for.sh

1
2
3
4
5

上面,循环的条件是引用系统命令的执行结果seq 1 5,但必须用反引号括起来

示例如下:

for file in ls; do echo $file; done

case.sh
check_ng.sh
first.sh
for.sh
if1.sh
if2.sh
option1.sh
option.sh
read.sh
sum.sh
variable.sh

另外循环的条件还可以是一组字符或者数字(用一个或多个空格隔开),也可以是一条命令的执行结果。

示例如下:

for i in 1 2 3 a b c; do echo $i; done

1
2
3
a
b
c


while循环

日常运维工作中,也会经常用while循环来编写死循环的脚本,用于监控某项服务。

具体格式如下:

while 条件
do
command
done

下面自定义一个脚本:

#!/bin/bash

a=6
while [ $a -ge 1]
do
echo a a = a a= aa=[$a-1]
done

查看执行结果:

sh while.sh

6
5
4
3
2
1

另外,可以用一个冒号:代替循环条件,这样就可以做到死循环


20.5 Shell脚本中的函数

shell脚本中的函数就是先把一段代码整理到一个小单元中,并给这个小单元命名,当用到这段代码时,直接调用这个小单元的名字即可。


下面自定义一个脚本:

vim func.sh

#!/bin/bash

function sum()
{
sum=$[$1+$2]
echo $sum
}
sum $1 $2 #预设变量$1 $2

查看执行结果:

sh func.sh 1 2

3

上面func.sh中的sum()为自定义的函数。

在shell脚本中函数的格式如下:

function 函数名()
{
command1
command2
}

需要注意的是,在shell脚本中,被调用的函数一定要写在最前面,不能出现在中间或最后。因为函数是要被调用的,如果还没有出现就被调用,那当然会出错。


20.6 Shell脚本中的中断和继续

在shell脚本循环的过程中,我们难免会遇到一些特殊需求,比如当循环到某个地方时需要做一些事情,这时候很有可能需要退出循环,或者跳过本次循环。


break

break用在循环中,不管是for或者while都可以。在脚本中使用它,表示退出本层循环。之所以说层,是因为有时我们会用到嵌套循环,大循环里面还有小循环,而break仅仅是退出那一层循环,它的上层循环不受影响

下面自定义一个脚本:

vim break.sh

#!/bin/bash

for i in seq 1 5
do
echo $i
if [ $i == 3 ]
then
break
fi

done
echo aaa

查看执行结果:

sh break.sh

1
2
3
aaa

上面脚本中,当i=3时,会跳出循环,后面的4和5不再执行,但上层的循环仍在继续。


continue

continue也是使用在循环中的,但和break不同,当在shell脚本中遇到continue时,结束的不是整个循环,而是本次循环(不退出本层循环,只是结束这一次循环)

下面自定义一个脚本:

vim continue.sh

#!/bin/bash

for i in seq 1 5
do
echo $i
if [ $i == 3 ]
then
continue
fi
echo $i
done

查看执行结果:

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
i in seq 1 5
do
echo $i
if [ $i == 3 ]
then
break
fi

done
echo aaa

查看执行结果:

sh break.sh

1
2
3
aaa

上面脚本中,当i=3时,会跳出循环,后面的4和5不再执行,但上层的循环仍在继续。


continue

continue也是使用在循环中的,但和break不同,当在shell脚本中遇到continue时,结束的不是整个循环,而是本次循环(不退出本层循环,只是结束这一次循环)

下面自定义一个脚本:

vim continue.sh

#!/bin/bash

for i in seq 1 5
do
echo $i
if [ $i == 3 ]
then
continue
fi
echo $i
done

查看执行结果:

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-ueq3aE6c-1713414699739)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

请选择项目类型 (输入数字):1.x6871, 2.x6853, 3.x6860-V, 4.x6861-V 输入你的选择: 3 请选择版本类型 (输入数字):1. user_root, 2. userdebug, 3. user 输入你的选择: 2 请选择编译模块 (输入数字):1. vnd, 2.sys, 3. prd, 4.tar_package, 5. all 输入你的选择: 1 =====x6860_h899_a1_v_tssi_64_armv82_infinix_vnd_tr_partition userdebug_2025-05-20-17-21-07===== x6860_h899_a1_v tran_projects/x6860/x6860_h899_a1_v/x6860.sh is not exists ===========================================Usage:================================================================== NAME: tran_setenv.sh SYNOPSIS source tran_setenv.sh &lt;project or tssi_project&gt; [single build] [bulid variant] [auto make] [enable log] [enable efuse] [TEE type] [DRAM VOL] [google key] [DRAM Temp] DESCRIPTION -h/help: show help information(usage) [project]: project or tssi_project name, MUST configure correctly [single build]: tssi must use, vnd sys prd full /work/chong.du/x6860/vnd [tssi_project]: tssi_32_ago_armv7_infinix tssi_32_ago_armv7_itel tssi_32_ago_armv7_tecno tssi_32_ago_infinix tssi_32_ago_tecno tssi_64_armv82_infinix tssi_64_armv82_itel tssi_64_armv82_tecno tssi_64_armv82_tecno_dolby tssi_64_infinix tssi_64_itel tssi_64_tecno tssi_t_64_armv82_wifi_infinix &lt;build variant&gt;: eng, userdebug, user, user_root &lt;enable log&gt;: mtklog, mobilelog, kom, logmuch &lt;enable efuse&gt;: efuse &lt;enable tkdn&gt;: tkdn_before, tkdn_after &lt;enable kom: kom&gt; &lt;enable testkeys&gt;: testkeys &lt;enable googlekey&gt;: use google testkey &lt;TEE type&gt;: microtrust(default), trustonic &lt;DRAM VOL&gt;: dram voltage: HV, NV, LV, FK, NULL(default) &lt;DRAM Temp&gt;:dram temperature, please key in a specific number. NULL(default) EXAMPLE EXAMPLE Tssi source source tran_setenv.sh tssi_32_infinix --It will make system eng compile environment source tran_setenv.sh tssi_32_infinix user --It will make system user compile environment source tran_setenv.sh r8_h3718_d vnd --It will configure eng compile environment, source tran_setenv.sh r8_h3718_d user prd --It Will configure user compile environment source tran_setenv.sh r8_h3718_d userdebug full mtklog efuse --It Will configure user-debug compile environment and enable mtklog and efuse features source tran_setenv.sh r8_h3718_d userdebug \e[1;31mprd\e[0m mtklog efuse microtrust DRAM_VOL=NV DRAM_TEMP=58 --It Will configure user-debug compile environment, enable mtklog and efuse features, choose MICROTRUST's TEE solution, config DRAM_VOL=NV and DRAM_TEMP=58 EXAMPLE Not Tssi source source tran_setenv.sh r8_h3718_d --It will configure eng compile environment source tran_setenv.sh r8_h3718_d user --It Will configure user compile environment source tran_setenv.sh r8_h3718_d userdebug mtklog efuse --It Will configure user-debug compile environment and enable mtklog and efuse features source tran_setenv.sh r8_h3718_d userdebug mtklog efuse microtrust DRAM_VOL=NV DRAM_TEMP=58 --It Will configure user-debug compile environment, enable mtklog and efuse features, choose MICROTRUST's TEE solution, config DRAM_VOL=NV and DRAM_TEMP=58 ===================================================================================================================
最新发布
05-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值