软件测试学习笔记丨Linux-Bash编程语法

2024-09-06 17:28

本文主要是介绍软件测试学习笔记丨Linux-Bash编程语法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/32091

一、Bash编程基础

1.1 变量

1.1.1 语法

Variable_name=value

1.1.2 变量定义的规则

  • 变量名区分大小写,a和A为两个不同的变量;
  • 变量名可以使用大小写字母混编的形式进行编写;
  • 变量名与值之间的=两侧都不能有空格;
  • 在读取或打印变量时,需使用$+变量名;
  • 变量可以写在Bash脚本中的任何地方,在运行时,Bash会自动将其替换成变量值。

1.1.3 Bash数据类型

  • 在Bash中声明变量后赋值,它会自动判断数据类型,不必在声明的同时去定义变量的数据类型。

1.1.4 Bash变量的类型

  • 系统定义的变量:
    • 通常是以大写字母形式存在,如BASH、SHELL等。
  • 用户定义的变量:
    • 多数以小写字母参与命名,但不具有大小写强制性规定。

1.1.5 Bash变量的定义与使用

letter_name="abc"
echo $letter_name

1.1.6 只读变量

a="123"
readonly a

1.1.7 删除变量

unset Variable_name

1.1.8 字符串的拼接

基本语法:str3="${str1}${str2}"

1.2 引号

  • 输入的内容为简单的字符串,或者文本时,单引号和双引号的作用没有任何区别。
  • 输出一个已定义的变量,则需要使用双引号。

1.3 数组

  • 数组可以定义为相似类型元素的集合。
  • 在Bash中,数组不必是相似类型元素的集合。

1.3.1 索引数组的声明和赋值

declare -a Array_Name # 索引数组
Array_Name[index_1]=value_1
Array_Name[index_2]=value_2

Array_Name=([index_1]=value_1[index_2]=value_2)

1.3.2 数组的访问

declare -a arr1=( hello world )
declare -A arr2=( [key1]=hello [key2]=world )
echo ${arr1[0]}
echo ${arr2[key1]}

1.3.3 取出所有元素

declare -a arr=( hello world )
echo ${arr[@]}
echo ${arr[*]}

1.3.4 数组的长度

declare -a arr=( hello world )
echo "arr length is ${#arr[@]}"
# 需要看总长度的时候使用@ 如果是当个元素长度则使用索引/key

1.3.5 向数组中添加元素

declare -a arr=( hello world )
arr+=(hogwarts)
arr[5]=harry

1.3.6 输出索引

declare -a arr=( hello world )
arr+=(hogwarts)
arr[5]=harry
echo "arr indexs is ${!arr[@]}"

1.4 控制语句

1.4.1 if 循环

# 单条件
if [ expression ];
then
statements
fi
# 多条件与
if [ expression_1 ] && [ expression_2 ];
then
statements
fi
# 多条件或
if [ expression_1 ] || [ expression_2 ];
then
statements
fi
# 多分支if [ expression_1 ] ;
then
statements
elif [ expression_2 ] ;
then
statements
else
statements
fi

1.4.2 for 循环

for variable in list
do
commands
done
//或
for (( expression1; expression2; expression3 ))
do
commands
done

for循环范围:

for num in {10..0..1}
do
echo $num
done

for循环数组:

arr=( "Welcome" "to" "hogwarts" )
for i in "${arr[@]}"
do
echo $i
done# @ 与 * 的区别for i in ${arr[@]}
do
echo $i
donefor i in ${arr[*]}
do
echo $i
donefor i in "${arr[*]}"
do
echo $i
done

表达式for循环:

for ((i=1; i<=10; i++))
do
echo "$i"
done

1.4.3 while 循环

while [ expression ];
do
commands;
multiple commands;
done

1.4.4 break 与 continue

  • break语句可以终止for循环的重复性任务。
  • continue语句在for循环中,以特定条件,跳过该条件下给定的特定语句。

1.5 函数

function_name() {commands
}

1.5.1 变量的作用域

  • 默认情况下,所有变量都定义为全局变量,即使在函数内部声明,也是如此;
  • local关键字在函数内部声明局部变量,该变量只能够在该函数内部使用。

1.5.2 返回值

  • Bash函数中,其返回值是执行的最后一个语句的状态。1-255(十进制)范围内表示失败,除此之外表示成功。
  • 想要从函数中返回任意实际的值,最简单的选择是将函数的执行结果分配给一个全局变量。
  • 更好的选择,是将值发送到stdout再打印输出。

1.5.3 参数传递

  • $0为函数本身;
  • $1、2…n参数传递的顺序位;
  • $#保存传递给函数的位置参数或数量;
  • $$当前进程ID号;
  • ∗ 或 *或 @保存传递给参数的所有位置参数或参数;
  • $?显示最后一个命令的退出状态,0表示正常,其他表示错误退出。

二、Bash脚本编写

2.1 Bash脚本创建

  • touch bash_script.sh
  • vim或者vi bash_script.sh
  • 写入代码
#!/bin/bash
echo "Hello Bash"### 2.2 Bash执行
- `chmod +x bash_script.sh`
- `./bash_script.sh`

2.3 Bash注释

  • 单行注释:
    • 注释段落的开头使用 #
  • 多行注释:
    • <<BLOCKBLOCK之间的内容会被当成注释;
    • :"中的内容会被当成注释。

2.4 read命令

  • read命令是用于从终端或者文件中,读取输入的内部命令;
  • 格式:read <variable_name>
  • read常用参数:
    • -p命令行选项在同一行输入;
    • -s静默输入;
    • -a对数组进行多个输入。

2.4.1 read读取单个或多个变量

echo "Enter the your name: "
read user_name
echo "Your name is $user_name"
echo
echo "Enter your age, phone and address: "
read age phone address
echo "your age is:$age, phone is:$phone, address: $address "

2.5 算术运算

  • Bash支持11种算术运算符。
运算符描述运算示例
+加法$((7+2)) ,打印输出 9
-减法$((7-2)) ,打印输出 5
*乘法$((7*2)) ,打印输出 14
/除法$((18/2)) ,打印输出 9
**求幂$((10**2)) ,打印输出 100
%$((11%3)) ,打印输出 2
+=常量递增变量,结果存储回变量x=7;let”x += 7”;echo $x ,打印输出 9
-=常量递减变量,结果存储回变量x=7;let”x -= 2”;echo $x ,打印输出 5
*=变量乘以常量,结果存储回变量x=7;let”x *= 2”;echo $x ,打印输出 14
/=变量除以常量,结果存储回变量x=18;let”x /= 2”;echo $x ,打印输出 9
%=变量除以常量的余数,结果存储回变量x=11;let”x %= 3”;echo $x ,打印输出 2

2.5.1 关系运算符

运算符描述运算示例
=赋值a=$b ,把变量b的值赋给a
==等于[ $a == $b ] 相等则返回true
!=不相等[ $a != $b ]不等则返回true

2.5.2 关系运算符列表

运算符描述运算示例
-eq检查两个数字是否相等1 -eq 1 ,返回 true
-ne检查两个数字是否不相等1 -ne 2 ,返回 true
-gt检查左边数是否大于右边数2 -gt 1 ,返回 true
-lt检查左边数是否小于右边数1 -gt 2 ,返回 true
-ge检查左边数是否大于等于右边数2 -ge 1 ,返回 true
-le检查左边数是否小于等于右边数1 -le 2 ,返回 true

2.5.3 Bash算术运算符

  • 双括号
  • 反引号:反引号要与expr(通用表达式求值器)执行算术扩展。
  • let:let "Num3=$((Num1+Num2))"

2.6 脚本输出文件

touch test.sh
chmod +x test.sh
vim test.sh
#!/bin/bash
echo "Hello Bash" > test.txt

2.7 Bash与目录操作命令结合

# 创建目录并生成文件
mkdir test
cd test
echo "hello" > test.txt
ls

2.8 Bash与内存操作结合

#!/bin/bashfor i in `ps aux | awk '{print $6}'|grep -v 'RSS'`
docount=$[ $count+$i ]
done
echo "$count/kb"

2.9 脚本中编写函数

  • 脚本中编写了函数,需要在脚本中调用才会执行;
  • 函数如果涉及传参,需要在调用函数时带上参数。

在这里插入图片描述

推荐学习

【霍格沃兹测试开发】7天软件测试快速入门带你从零基础/转行/小白/就业/测试用例设计实战

【霍格沃兹测试开发】最新版!Web 自动化测试从入门到精通/ 电子商务产品实战/Selenium (上集)

【霍格沃兹测试开发】最新版!Web 自动化测试从入门到精通/ 电子商务产品实战/Selenium (下集)

【霍格沃兹测试开发】明星讲师精心打造最新Python 教程软件测试开发从业者必学(上集)

【霍格沃兹测试开发】明星讲师精心打造最新Python 教程软件测试开发从业者必学(下集)

【霍格沃兹测试开发】精品课合集/ 自动化测试/ 性能测试/ 精准测试/ 测试左移/ 测试右移/ 人工智能测试

【霍格沃兹测试开发】腾讯/ 百度/ 阿里/ 字节测试专家技术沙龙分享合集/ 精准化测试/ 流量回放/Diff

【霍格沃兹测试开发】Pytest 用例结构/ 编写规范 / 免费分享

【霍格沃兹测试开发】JMeter 实时性能监控平台/ 数据分析展示系统Grafana/Docker 安装

【霍格沃兹测试开发】接口自动化测试的场景有哪些?为什么要做接口自动化测试?如何一键生成测试报告?

【霍格沃兹测试开发】面试技巧指导/ 测试开发能力评级/1V1 模拟面试实战/ 冲刺年薪百万!

【霍格沃兹测试开发】腾讯软件测试能力评级标准/ 要评级表格的联系我

【霍格沃兹测试开发】Pytest 与Allure2 一键生成测试报告/ 测试用例断言/ 数据驱动/ 参数化

【霍格沃兹测试开发】App 功能测试实战快速入门/adb 常用命令/adb 压力测试

【霍格沃兹测试开发】阿里/ 百度/ 腾讯/ 滴滴/ 字节/ 一线大厂面试真题讲解,卷完拿高薪Offer !

【霍格沃兹测试开发】App自动化测试零基础快速入门/Appium/自动化用例录制/参数配置

【霍格沃兹测试开发】如何用Postman 做接口测试,从入门到实战/ 接口抓包(最新最全教程)

这篇关于软件测试学习笔记丨Linux-Bash编程语法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1142647

相关文章

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Linux云服务器手动配置DNS的方法步骤

《Linux云服务器手动配置DNS的方法步骤》在Linux云服务器上手动配置DNS(域名系统)是确保服务器能够正常解析域名的重要步骤,以下是详细的配置方法,包括系统文件的修改和常见问题的解决方案,需要... 目录1. 为什么需要手动配置 DNS?2. 手动配置 DNS 的方法方法 1:修改 /etc/res

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

Linux挂载linux/Windows共享目录实现方式

《Linux挂载linux/Windows共享目录实现方式》:本文主要介绍Linux挂载linux/Windows共享目录实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录文件共享协议linux环境作为服务端(NFS)在服务器端安装 NFS创建要共享的目录修改 NFS 配

linux系统中java的cacerts的优先级详解

《linux系统中java的cacerts的优先级详解》文章讲解了Java信任库(cacerts)的优先级与管理方式,指出JDK自带的cacerts默认优先级更高,系统级cacerts需手动同步或显式... 目录Java 默认使用哪个?如何检查当前使用的信任库?简要了解Java的信任库总结了解 Java 信