软件测试基础篇——Shell

news2025/1/12 18:40:24

1、 shell概述

  • 脚本:也是属于文本文件/文本文档,除了读和写之外,还可以直接被执行/运行,一句话总结:一个可以直接被执行(运行)的文件/文档,被称为“脚本”

  • shell脚本利用shell技术编写出来的一个可执行(运行)的文档

  • shell终端:是一个应用程序,提供了一个界面,用户可以在界面中实现对Linux系统的一系列操作,也被称为“shell终端界面”,“shell终端窗口”

  • shell脚本的编辑和运行环境

  1. 文本编辑器:vi/vim命令,实现对shell脚本的编写
  2. 脚本解析器:解析并执行所写的shell脚本,bash解析器:/bin/bash

​ 备注:不同的Linux操作系统版本,都嵌入的有shell环境,我们只需要保证系统能够正常运行,就可以直接进行shell脚本的编辑和解析执行。

  • shell/shell脚本到底能做什么?

​ 将许多命令放在一起,用户只需要执行该脚本文件一次,就会把脚本中所有的命令全部执行一遍。

  • 编写第一个脚本文件

    • 编写:vi/vim 脚本文件的名字.sh

      例:编写脚本shellfile.sh,实现输出“这是我的第一个脚本文件”

      脚本的第一行,固定格式的写法:#!/bin/bash 通过**#!**指定该脚本编写完成后,是交给/bin/bash解析器进行解析和执行的操作。

    • 运行脚本:

​ 方式一:

给脚本赋予可执行权限:chmod +x 脚本文件名字.sh

执行/运行脚本:./脚本文件名字.sh

image-20230710161132873

​ 方式二:重点掌握

直接交给bash解析器:/bin/bash 脚本文件名字.sh

image-20230710162118613

​ 练习:

​ a.创建一个脚本shell01.sh,输出两句话:“Hello,World!” ,“千锋软件测试” ,运行方式采用方式一
​ b.创建一个脚本shell02.sh,实现以下操作: 运行方式采用方式二在home目录下创建两个文件:file1.txt file2.txt
​ 复制file2.txt,到mnt目录下
​ 删除系统中大家自己建立的任意一个文件夹
​ 显示当前系统日期时间
​ 创建两个目录 dir01 dir02
​ 移动dir02到home目录
​ 输出"脚本执行完毕"

  • shell变量的应用

    • 变量:指的是在程序运行过程中允许发生改变的量,称为”变量“

    • 变量的作用:用来接收程序在运行(执行)时,会发生改变的数据

    • 变量的声明(创建)

      格式:变量名=值/变量值

    注意:变量名的命名规则:

    ​ 名字首个字符必须是大小写字母(Aa-Zz)

    ​ 名字中不能有空格,可以有下划线_

    ​ 名字中不能有标点符号

    ​ 名字不能是关键字/关键词

    ​ 备注:关键字/关键词:指的是在当前操作中,已经有特殊含义的词语,例如cp,mv…,变量名和等号之间不能有空格

    • shell注释:注释的内容不会参与执行,只是起到了解释说明的作用(备注)

      格式:#注释的内容

    • ==调用==变量:获取到变量中存储的值

      格式一:==$==变量名

      格式二:$ {变量名} {}的作用:明确告诉$调用的是哪一个变量

  • 变量的其他操作

    • 变量调用的差异化

    如果$ 后面调用的变量名和其他的字符串是直接拼在一起,那么大家要把变量名加上{},明确告诉$要调用的具体变量。

    • 只读变量:变量数据只能读取,不能修改和删除

    格式:readonly 变量名

    • 删除变量

    格式:unset 变量名

  • shell 中字符串的操作

    • 字符串:一般是由双引号或单引号包裹的任意个字符

      例:name=“张三” class_name=“testing2303”

    • 字符串拼接:把多个字符串数据拼凑在一起

      格式:直接写一起

      例:echo “我的名字是:$name” ——>echo “我的名字是:张三”

      echo $name $class_name ——>张三testing2303

    • 获取字符串长度:统计字符串中字符的总个数

      例:x=“testing” x变量存储的字符串长度是7

    格式:${#变量名}

    ​ 注意:在字符串中,符号和空格也算作一个字符的

    • 字符串截取的操作:把字符串数据的其中一部分给截取出来

      格式:${变量名:开始位置的下标:截取的字符长度/字符总个数}

      下标=位置-1 例:第五个位置开始截取,下标:4;从下标为11的位置开始截取,位置:12

  • shell中数组的使用

    • 数组:等同于数学中的集合,用来存储多个相同类型的数据集合

      例:数学:集合:一般用来存储多个数据,{23,53,56,54,80}

    • 声明数组

      数组名=(值1 值2 值3 值4…)

    • 获取数组中的数据

      ①获取数组中所有的数据:${数组名[@]}

      ②获取数组中指定位置上的值:${数组名[下标]}

      下标=位置-1

    • 获取数组的长度

      ①获取数组中数据的总个数:${#数组名[@]}

      ②获取数组中指定位置上数据的长度:${#数组名[下标]}

      备注:相当于指定数据包含的字符总个数

    • 声明数组格式二(了解)

      数组名[下标]=值

    • 其他操作

      ①read:读取终端用户的输入,传递给脚本中它所修饰的变量

      格式:read 变量名

      ②定向符的使用

      单个定向符 > 将操作的结果,定向保存至文件(覆盖)

      双重定向符 >> 将操作的结果,定向保存至文件(追加)

      ③echo Linux命令(反引号``) 把Linux命令执行的结果,当做一个“字符串”数据,交给echo做输出 了解即可

2、shell运算符的应用

  1. 运算符:主要帮助使用者进行一系列的计算,判断,检测等相关操作

  2. 算数运算符

    • +:加法
    • -:减法
    • *:乘法
    • /:除法,取商
    • %:取余,取余数
    • =:赋值,把等号右边的值,赋值给等号左边的变量 x=23

    借助于计算表达式:$((计算公式))

    • ==:恒等,判断两个数字是否相等,相等返回true(成立,真),不相等返回false(不成立,假)

      例:56==56 true

    • !=:不相等,判断两个数字是否相等,不相等返回true,相等返回false

      例:23!=45 true 89!=89 false

  3. if语句:判断条件语句、条件判断语句

​ 思想:根据【判断条件】的结果,来执行不同的语句块

​ 格式一:思想:只关注条件成立后的操作

​ if [ 判断条件 ]

​ then

​ 语句块

​ fi

​ 格式二:思想:不管条件成立与否,都有对应的操作

​ if [ 判断条件 ]

​ then

​ 语句块1(条件成立后要做的事情)

​ else

​ 语句块2(条件不成立后要做的事情)

​ fi

​ 备注:如果条件成立,就执行then后面的语句块;条件不成立,就执行else后面的语句块

回顾
  • shell技术的基本操作

    • 字符串拼接:多个字符串拼凑写在一起即可

    • 字符串长度:统计字符的总个数 ${#变量名}

    • 字符串截取:下标=位置-1 ${变量名:开始的下标:截取字符长度}

    • 数组:存放多个相同类型数据的集合

      数组名=(值1 值2 值3…)

      获取数组所有的值:${数组名[@]}

      获取指定位置的值:${数组名[下标]}

      获取数组的长度:数组中元素值的总个数:${#数组名[@]}

      获取指定位置上数据的长度:${#数组名[下标]}

    • read命令:读取终端中输入的数据,传递给脚本中的变量

    • 定向符:操作的结果,定向保存至文件 “>”覆盖,“>>”追加

  • 运算符

    • 算数运算符:计算,一定会借助于计算表达式 $((计算公式)) /除法:取商 %取余:取余数 ==恒等 判相等 !=判不相等

    • if语句:判断条件语句:做判定操作

      • 格式一:思想,只关注条件成立后的操作

        if [ 判断条件 ]

        then

        ​ 语句块

        fi

      • 格式二:思想,不管条件成立与否,都有对应的操作

        if [ 判断条件 ]

        then 语句块1

        else 语句块2

        fi


  1. 关系运算符:实现判断的操作

​ -eq 等同于 == 判相等

​ -ne 等同于 != 判不相等

​ -gt 大于

​ -lt 小于 例:34 -lt 50 ——>34<50 true

​ -ge 大于等于(大于或等于)

​ -le 小于等于(小于或等于)

备注:脚本中的语句,都是按照【顺序】来执行的

  1. 布尔运算符:主要帮助连接多个判断表达式

    • 布尔运算符的操作结果只有两个:true和false

      ! 非运算,思想:取反

      -a 与运算,思想:连接多个判断表达式,如果有一个判断表达式的结果为false,整体与出来的结果就是false(只要有false,结果就是false)
      -o 或运算,思想:连接多个判断表达式,如果有一个判断表达式结果为true,整体或出来的结果就是true(只要有true,结果就是true)

  2. 逻辑运算符:需要用两个中括号包裹[ [ ] ]

    • && 逻辑与 只要有false,结果就是false
    • || 逻辑或 只要有true,结果就是true
  3. 字符串运算符:实现对字符串的运算操作

    • 判断字符串是否相等:

      = 判相等 例:“test”=“test”—>true

      != 判不相等 例:“testing”!=“test”——>false

      判断字符串长度是否为0:

      -z 为0的时候返回true 例:name=“”,name变量的长度为0

      -n 不为0的时候返回true

    • [$变量名] 判断字符串是否为空,不为空返回true—–>变量中存的是有字符串数据

  4. 文件测试运算符:用于检测文件的各种属性

    • -d(dir)判定是否为目录
    • -f 判定是否为文件
    • -r 判定是否可读
    • -w 判定是否可写
    • -x 判定是否可执行
    • -e 判定文件或目录是否存在,存在返回true
    • -s 检测文件不为空返回true
  5. test:用于进行检测,修饰判断条件 <——> [ ]

    • if语句格式一:

      if test 判断条件

      then 语句块

      fi

    • if语句格式二:

      if test 判断条件

      then 语句块1

      else 语句块2

      fi

-e:开启转义字符

3、shell语句结构的使用

  1. if语句:判断条件语句:格式三:思想:多条件的判定操作

​ if [ 判断条件1 ]

​ then 语句块1

​ elif [ 判断条件2 ]

​ then 语句块2

​ elif [ 判断条件3 ]

​ then 语句块3

​ …

​ else 语句块n

​ fi

  1. 语句结构之间是可以互相嵌套使用,嵌套语句的执行,从外到内,层层递进式的执行操作

回顾
  1. 运算符

​ 算数运算符 + - / * % == != ——>$(())

​ 关系运算符 -eq -ne -gt -lt -ge -le

​ 布尔运算符 true false !取反 -a与运算(只要有false,结果就是false) -o或运算(只要有true,结果就是true)

​ 逻辑运算符 [[]] 逻辑与&& 逻辑或||

​ 字符串运算符 = != 检测字符串长度是否为0:-z为0返回true -n不为0返回true 检测字符串不为空:[ $变量名 ]

​ 文件测试运算符: -d -f -r -w -x -e(是否存在) -s(是否为空)

  1. 语句结构

​ 判断条件语句格式三:思想:多条件判断

​ if test 判断条件1

​ then 语句块1

​ elif test 判断条件2

​ then 语句块2

​ else 语句块n

​ fi


  1. 循环语句

​ 循环:反复、来回、一直、持续…进行某些操作

思想:只要判断条件成立,就会一直执行语句块,当判断条件不成立,循环就会终止

  • while循环语句

​ 格式:

​ while((判断条件))

​ do

​ 循环体(条件成立后,一直要做的事情)

​ done

​ 解析:循环语句分析的参考点:

循环语句的四要素

​ ①循环变量:用来接收循环过程中会发生改变的数据

​ ②循环条件:又被称为判断条件,用来决定循环的执行过程(是否执行循环操作)

​ ③循环体:写的是条件成立后,要一直/循环执行的语句块

​ ④循环变量的计算:用来进行变量的计算的操作过程(通过计算的方式,改变循环变量中的数据)

例:通过循环语句,实现,分别输出1-5之间的数字

let命令:可以让表达式或变量进行计算的操作

自增运算符:++——> +1

自减运算符:- - ——> -1

let “变量名++”:每一次执行时,都会让变量进行自动加1操作

let “变量名- -”:每一次执行时,都会让变量进行自动减1操作

修饰判断条件的符号:

​ if语句:[ ] test

​ while,for语句:(()) 支持数学运算符:> < >= <= != ==

例:输出1-100之间的偶数(循环语句+判断条件语句)

练习:a.使用while语句输出1-10之间的数字

​ b.输出1-100之间能够被3整除的数字

  • for循环语句

    for((定义循环变量;循环条件;循环变量的计算操作))

    do

    ​ 循环体

    done

例:使用for语句输出1-10之间的数字

​ 统计1-100之间能够被3整除的数字的总个数

练习:利用for语句

a.输出1-5的数字

b.输出1-100之间的偶数

c.输出1-100之间能够同时被3和5整除的数字

  • 终止循环的操作命令:

break:在循环体中,只要遇到break,无条件强制终止

continue:在循环体中,只要遇到continue,会跳转到循环开始的地方(跳转到循环条件的位置,进行新一轮的判定;continue后面写的语句块是不会执行的)

死循环:指的是循环条件永远成立,程序执行根本停不下来

while :,冒号的作用就是代表的是true的结果


回顾
  • 循环语句:思想:只要条件成立,循环体一直会被执行

​ while,for

四要素:循环变量,循环条件,循环体,循环变量的计算操作

​ break 无条件强制终止

​ continue 后面的语句块是不会被执行的,跳转到循环开始的地方(循环条件)

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

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

相关文章

ThinkPHP8命名规范-ThinkPHP8知识详解

本文主要讲解thinkphp8的命名规范&#xff0c;主要包括&#xff1a;遵循PHP自身的PSR-2命名规范和PSR-4自动加载规范、目录和文件命名规范、函数和类、属性命名规范、常量和配置命名规范、数据表和字段命名规范、不能使用PHP保留字。 在使用thinkphp8开发项目之前&#xff0c;…

Python pycparser(c文件解析)模块使用教程

文章目录 安装 pycparser 模块模块开发者网址获取抽象语法树1. 需要导入的模块2. 获取 不关注预处理相关 c语言文件的抽象语法树ast3. 获取 预处理后的c语言文件的抽象语法树ast 语法树组成1. 数据类型定义 Typedef2. 类型声明 TypeDecl3. 标识符类型 IdentifierType4. 变量声明…

人工智能原理概述 - ChatGPT 背后的故事

大家好&#xff0c;我是比特桃。如果说 2023 年最火的事情是什么&#xff0c;毫无疑问就是由 ChatGPT 所引领的AI浪潮。今年无论是平日的各种媒体、工作中接触到的项目还是生活中大家讨论的热点&#xff0c;都离不开AI。其实对于互联网行业来说&#xff0c;自从深度学习出来后就…

(7)原神各属性角色的max与min

在对全部角色进行分析之后&#xff0c;还有必要对各属性角色的生命值/防御力/攻击力进行max与min显示&#xff1a; 话不多说&#xff0c;上货&#xff01; from pyecharts.charts import Radar from pyecharts import options as opts import pandas as pd from pyecharts.ch…

Openlayers实战:选择feature,列表滑动,定位到相应的列表位置

在Openlayers的实际项目中,点击某个图层的feature,在左侧的列表中显示出来,滚动条滑动,能显示在视觉区内,具体的方法请参考源代码。 效果图 数据 guangdong.json https://geo.datav.aliyun.com/areas_v3/bound/440000_full.json 源代码 /* * @Author: 大剑师兰特(xia…

系统架构设计专业技能 · 软件工程之软件测试与维护(六)【系统架构设计师】

系列文章目录 系统架构设计专业技能 网络规划与设计&#xff08;三&#xff09;【系统架构设计师】 系统架构设计专业技能 系统安全分析与设计&#xff08;四&#xff09;【系统架构设计师】 系统架构设计高级技能 软件架构设计&#xff08;一&#xff09;【系统架构设计师…

在CMamke生成的VS项目中插入程序

在主文件夹的CMakeLists.tex中加入SET(COMPILE_WITH_LSVM OFF CACHE BOOL "Compile with LSVM") 再添加IF(COMPILE_WITH_LSVM) MESSAGE("Compiling with: LSVM") ADD_DEFINITIONS(-DCOMPILE_WITH_LSVM) ADD_SUBDIRECTORY(LSVM) LIST(APPEND SRC LSVM_wrap…

华为网络篇 RIPv2的基础配置-25

难度 1复杂度1 目录 一、实验原理 1.1 RIP的版本 1.2 RIP的路由更新方式 1.3 RIP的计时器 1.4 RIP的防环机制 二、实验拓扑 三、实验步骤 四、实验过程 总结 一、实验原理 RIP&#xff08;Routing Information Protocol&#xff0c;路由信息协议&#xff09;&am…

strlen和sizeof的区别

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解C语言中的sizeof和strlen&#xff08;仅此一篇让你明白它们两的差别&#xff09;&#xff0c;如果大家觉得我写的不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 文章目录 strlensizeof 在…

基于python+MobileNetV2算法模型实现一个图像识别分类系统

一、目录 算法模型介绍模型使用训练模型评估项目扩展 二、算法模型介绍 图像识别是计算机视觉领域的重要研究方向&#xff0c;它在人脸识别、物体检测、图像分类等领域有着广泛的应用。随着移动设备的普及和计算资源的限制&#xff0c;设计高效的图像识别算法变得尤为重要。…

Patch SCN一键解决ORA-600 2662故障---惜分飞

客户强制重启库之后,数据库启动报ORA-600 2037,ORA-745 kcbs_reset_pool/kcbzre1等错误 Wed Aug 09 13:25:38 2023 alter database mount exclusive Successful mount of redo thread 1, with mount id 1672229586 Database mounted in Exclusive Mode Lost write protection d…

const和指针的结合

易错知识点 1、常量不能作为左值&#xff0c;防止直接修改常量的值 2、不能将常量的地址泄露给普通指针或普通引用变量&#xff0c;防止间接修改常量的值 // 关于易错知识点第2点 // 不能将常量的地址泄露给普通指针或普通引用变量&#xff0c;防止间接修改常量的值 const int …

Spannable配合AnimationDrawable实现TextView中展示Gif图片

辣的原理解释&#xff0c;反正大家也不爱看&#xff0c;所以直接上代码了 长这样&#xff0c;下面两个图是gif&#xff0c;会动的。 package com.example.myapplication;import android.content.Context; import android.graphics.Bitmap; import android.graphics.drawable…

SpringMVC注解开发

1. 构建流程 1&#xff09;IDEA创建一个Maven项目。配置所需依赖 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></depe…

198、仿真-基于51单片机函数波形发生器调幅度频率波形Proteus仿真(程序+Proteus仿真+原理图+流程图+元器件清单+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、硬件设计 二、设计功能 三、Proteus仿真图 四、原理图 五、程序源码 资料包括&#xff1a; 需要完整的资料可以点击下面的名片加下我&#xff0c;找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选…

MySQL数据库表的增删查改 - 进阶

一&#xff0c;数据库约束 1.1 约束对象 not null - 该列不能为空unique - 保证该列的每一行都不一样default - 规定没有给列赋值时的默认值&#xff08;自定义&#xff09;primary key - not null 和 unique 的结合&#xff0c;会给该列添加一个索引&#xff0…

StarGANv2: Diverse Image Synthesis for Multiple Domains论文解读及实现(一)

StarGAN v2: Diverse Image Synthesis for Multiple Domainsp github:https://github.com/clovaai/stargan-v2 1 模型架构 模型主要架构由四部分组成 ①Generator、②Mapping network、③Style encoder、④Discriminator Generator&#xff1a;G网络 生成模型G将输入图片x转换…

MATLAB从文件得出数据并计算吸收光谱

这一系列就是科研用的真实程序了&#xff0c;也是对自己的一个备忘录 真的收购每次都重写了 但真的文件太多了找不到啊&#xff01;&#xff01;&#xff01; 好吧是我废物 废话不多说&#xff0c;这就开始 基础的清理&#xff1a; clear clc close all 读取文件中的数据…

Telnet是什么

一.Telnet是什么 Telnet协议是TCP/IP协议家族中的一员&#xff0c;是Internet远程登陆服务的标准协议和主要方式。 二.Telnet的作用 1.telnet就是查看某个端口是否可访问。 我们在搞开发的时候&#xff0c;经常要用的端口就是 8080。那么你可以启动服务器&#xff0c;用tel…

web会话跟踪以及JWT响应拦截机制

目录 JWT 会话跟踪 token 响应拦截器 http是无状态的&#xff0c;登录成功后&#xff0c;客户端就与服务器断开连接&#xff0c;之后再向后端发送请求时&#xff0c;后端需要知道前端是哪个用户在进行操作。 JWT Json web token (JWT), 是为了在网络应用环境间传递声明而…