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

news2024/12/24 19:45:40

本文转自测试人社区,原文链接: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
done

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

for 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/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 做接口测试,从入门到实战/ 接口抓包(最新最全教程)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2107330.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

陷抄袭风波 《黑神话:悟空》该如何应对

都说人红是非多&#xff0c;国产首部3A游戏《黑神话&#xff1a;悟空》在爆火的同时&#xff0c;一些问题也随之出现。一方面《黑神话&#xff1a;悟空》陷入抄袭风波&#xff1f;另一方面该游戏也被很多黑灰产盯上了。 8月23日&#xff0c;“塞上李云中”发布微博&#xff0c;…

【WRF安装编译问题解决】Linux中gcc和gfortran降级方法

Linux中gcc和gfortran降级方法 准备&#xff1a;gcc和gfortran版本查找1 查看gcc和gfortran安装版本2 gcc版本降级2.1 gcc版本降级至9.5.0-通过下载源码编译安装2.2 gcc版本降级至9.1.0-通过下载源码编译安装 3 gfortran版本降级参考 在安装编译WRF环境时&#xff0c;无法成功编…

【Python报错已解决】`WebDriverException: Message: invalid session id`

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引言&#xff1a;一、问题描述&#xff1a;1.1 报错示例&#xff1a;1.2 报错分析&#xff1a;1.3 解决思路&#xff…

Kubernetes精讲之环境搭建

目录 一 Kubernetes 简介及部署方法 1.1 应用部署方式演变 1.2 容器编排应用 1.3 kubernetes 简介 1.4 K8S的设计架构 1.4.1 K8S各个组件用途 1.4.2 K8S 各组件之间的调用关系 1.4.3 K8S 的 常用名词感念 1.4.4 k8s的分层架构 二 K8S集群环境搭建 2.1 k8s中容器的管…

每日一题,力扣leetcode Hot100之118.杨辉三角

解题思路就是动态规划&#xff0c;确定好边界值和要动态传递的值 边界值就是每一排的第一个和最后一个肯定是1 动态传递值就是除了边界值每一个都等于他的左上加右上 class Solution:def generate(self, numRows: int) -> List[List[int]]:ret list()for i in range(num…

ES之三:springboot集成ES

一.选择版本很重要&#xff0c;不然会找不到好多方法 明明有Timeout方法&#xff0c;不报红&#xff0c;运行时&#xff0c;报错&#xff0c;找不到该类 ClassNotFoundException 为了避免使用的Elasticsearch版本和SpringBoot采用的版本不一致导致的问题&#xff0c;尽量使用…

web群集--nginx常见的几种负载均衡调度算法的配置过程和效果展示

文章目录 前言环境前置配置httpd主机tomcat主机 负载均衡调度算法1.轮询配置过程效果展示 2.加权轮询配置过程效果展示 3. IP哈希&#xff08;IP Hash&#xff09;配置过程效果展示 4. 最少连接&#xff08;Least Connections&#xff09;配置过程效果展示 5.加权最小连接这个在…

实时备份工具

实时同步工具 1. 常用实时同步工具1.1 sersync1.2 inotify-tools1.3 ‌lsync‌ 2. 工具对比2.1 常用实时同步工具对比2.2 ‌sersync和lsyncd对比 3. 实践3.1 sersync1. 简易架构2. 服务器3. 搭建简易web服务器4. 配置NFS服务器5. 配置备份服务器6. 实时同步部分7. 验证 1. 常用…

穿越机的应用行业!!!

1. 军事领域 侦察与目标搜索&#xff1a;穿越机能够快速穿越危险区域&#xff0c;执行侦察任务&#xff0c;实时获取战场信息&#xff0c;对敌方目标进行精确搜索和定位。其灵活性和机动性使其成为战场上的重要侦察工具。 目标摧毁&#xff1a;经过改装的穿越机可挂载火箭弹或…

重磅活动!南开大学赵宏教授倾情分享AI挑战下的教育教学新理念与新方法

人工智能是科技发展的前沿领域&#xff0c;也是推动新质生产力形成的关键动力。当前&#xff0c;各个高校正积极探索人工智能对高等教育的改革&#xff0c;以培养适应未来社会发展需求的新型人才。 本次活动旨在传播 AI 挑战下的教育教学新理念与新方法&#xff0c;推动人才培养…

常见echart图表 返回数据与Java实体类

返回数据示例详见 Examples - Apache ECharts 一、折线图 实体类 public class LineChart {String name;List<BaseSeries> series;List<String> xAxis; }public class BaseSeries {String name;Double[] data; } 二、柱状图 实体类 public class Chart {String…

深度解析Linux系统的基本概念及优缺点和原理

目录 基本概念 操作系统简介 架构组成 多任务处理 安全性与开放性 发行版本 使用场景 学习资源 优点 缺点 1. 软件兼容性问题 2. 图形界面应用程序较少 3. 安装和配置复杂 4. 学习曲线陡峭 5. 缺乏技术支持 6. 硬件兼容性问题 7. 安全风险 8. 性能问题 9. 游…

数据结构代码集训day16(适合考研、自学、期末和专升本)

本题来自B站up&#xff1a;白话拆解数据结构 今日题目就一个&#xff1a;约瑟夫环问题。 一个圈共有N个人&#xff08;N为不确定的数字&#xff09;&#xff0c;第一个人的编号为0或者1&#xff08;两个都可以&#xff0c;看你的程序如何编写&#xff09;&#xff0c;假设这边我…

提升App推广效果,从精准获取下载数据开始

在App推广的过程中&#xff0c;获取准确的下载数据一直是一个令人头疼的问题。你知道吗&#xff1f;无法精确追踪用户来源和下载量&#xff0c;就像是在黑暗中摸索&#xff0c;让推广效果大打折扣。今天&#xff0c;我们就来揭秘如何轻松获取App下载数据&#xff0c;优化你的推…

解题--有关动态内存开辟 几道经典的笔试题

文章目录 前言 一、题目一 二、题目二 三、题目三 四、题目四 总结 前言 路漫漫其修远兮&#xff0c;吾将上下而求索。 一、题目一 运行Test 函数会出现什么样的结果&#xff1f; 在Test函数之中&#xff0c;首先创建了一个指针变量 str , 并将其赋值为NULL&#xff1b; …

查看HBA卡是否支持FC协议

cat /sys/class/fc_host/host*/port_name lspci | grep -i fibre # 看有无fibre channel控制器 官网查询 Emulex Lpe32000 https://docs.broadcom.com/doc/12357773 https://cn.genuinemodules.com/image/catalog/pdf/18/LPe32000.pdf

Python【2】问题

目录 模块与包是什么&#xff1f; 赋值、浅拷贝和深拷贝的区别&#xff1f; Python中如何生成随机数&#xff1f; Python中的os模块常用方法&#xff1f;□ os.path和sys.path分别表示什么意思&#xff1f;□ 赋值 read、readline和readlines的区别&#xff1f; 介绍一…

vTESTstudio系列13--vTESTstudio中的动态函数库介绍3

在上一篇文章中&#xff08;vTESTstudio系列12--vTESTstudio中的动态函数库介绍2&#xff09;&#xff0c;给大家介绍了如何通过osek_tp.dll的接口去发送诊断指令&#xff0c;本篇文章给大家介绍如何去处理诊断回复内容&#xff0c;确保实际的诊断回复是符合需求。Lets Go!!! …

Java项目: 基于SpringBoot+mysql在线文档管理系统(含源码+数据库+开题报告+答辩PPT+毕业论文)

一、项目简介 本项目是一套基于SpringBootmysql在线文档管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、功…

VScode:前端开发中的常用快捷键和技巧

1.菜单栏 2.内容相关&#xff1a; 格式化文档 搜索文件名