软件测试学习笔记丨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变量的定义与使用

bash 复制代码
letter_name="abc"
echo $letter_name

1.1.6 只读变量

bash 复制代码
a="123"
readonly a

1.1.7 删除变量

bash 复制代码
unset Variable_name

1.1.8 字符串的拼接

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

1.2 引号

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

1.3 数组

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

1.3.1 索引数组的声明和赋值

bash 复制代码
declare -a Array_Name # 索引数组
Array_Name[index_1]=value_1
Array_Name[index_2]=value_2

bash 复制代码
Array_Name=(
    [index_1]=value_1
    [index_2]=value_2
    )

1.3.2 数组的访问

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

1.3.3 取出所有元素

bash 复制代码
declare -a arr=( hello world )
echo ${arr[@]}
echo ${arr[*]}

1.3.4 数组的长度

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

1.3.5 向数组中添加元素

bash 复制代码
declare -a arr=( hello world )
arr+=(hogwarts)
arr[5]=harry

1.3.6 输出索引

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

1.4 控制语句

1.4.1 if 循环

bash 复制代码
# 单条件
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 循环

bash 复制代码
for variable in list
do
commands
done
//或
for (( expression1; expression2; expression3 ))
do
commands
done

for循环范围:

bash 复制代码
for num in {10..0..1}
do
echo $num
done

for循环数组:

bash 复制代码
arr=( "Welcome" "to" "hogwarts" )
for i in "${arr[@]}"
do
echo $i
done

# @ 与 * 的区别

for i in ${arr[@]}
do
echo $i
done

for i in ${arr[*]}
do
echo $i
done

for i in "${arr[*]}"
do
echo $i
done

表达式for循环:

bash 复制代码
for ((i=1; i<=10; i++))
do
echo "$i"
done

1.4.3 while 循环

bash 复制代码
while [ expression ];
do
commands;
multiple commands;
done

1.4.4 break 与 continue

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

1.5 函数

bash 复制代码
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
  • 写入代码
bash 复制代码
#!/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读取单个或多个变量

bash 复制代码
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 脚本输出文件

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

2.7 Bash与目录操作命令结合

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

2.8 Bash与内存操作结合

bash 复制代码
#!/bin/bash

for i in `ps aux | awk '{print $6}'|grep -v 'RSS'`
do
 count=$[ $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 做接口测试,从入门到实战/ 接口抓包(最新最全教程)

相关推荐
程序员yt9 分钟前
双非一本电子信息专业自学嵌入式,学完 Linux 后咋走?单片机 & FreeRTOS 要补吗?
linux·运维·单片机
CSDN_PBB3 小时前
[STM32 - 野火] - - - 固件库学习笔记 - - - 十五.设置FLASH的读写保护及解除
笔记·stm32·学习
安於宿命5 小时前
【Linux】进程间通信——进程池
linux·c++
新兴ICT项目支撑5 小时前
天翼云910B部署DeepSeek蒸馏70B LLaMA模型实践总结
linux·运维·服务器·910b·天翼云·deepseek r1
鸡啄米的时光机7 小时前
vscode的一些实用操作
vscode·学习
测试涛叔7 小时前
高级自动化测试常见面试题(Web、App、接口)
软件测试·面试
Kai HVZ7 小时前
《深度学习》——调整学习率和保存使用最优模型
人工智能·深度学习·学习
Spike()7 小时前
HaProxy源码安装(Rocky8)
linux·负载均衡
程序员三藏7 小时前
Postman接口测试的cookie,token,session....鉴权
自动化测试·软件测试·测试工具·职场和发展·测试用例·接口测试·postman
网硕互联的小客服7 小时前
如何提高网站在百度中的权重?
linux·运维·服务器·windows·安全