软件测试基础篇——Shell

news/2024/11/7 21:02:59/

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.ppmy.cn/news/1027875.html

相关文章

【Go 基础篇】Go语言浮点类型:探索浮点数的特点与应用

介绍 浮点数是计算机编程中用于表示实数的一种数据类型&#xff0c;用于处理具有小数部分的数值。Go语言&#xff08;Golang&#xff09;提供了两种主要的浮点数类型&#xff1a;float32和float64&#xff0c;分别用于单精度和双精度浮点数的表示。本篇博客将深入探讨Go语言中…

ol问题总结二

一、加载坐标系是4326格式的&#xff0c;使用wfsServer发布的服务&#xff0c;图层加载失败&#xff1b;坐标系是3857格式的。图层加载正常 原因&#xff1a;4326格式的&#xff0c;发布出来的&#xff0c;经纬度是颠倒的 解决方案一&#xff1a;将经纬度进行反转 <templa…

Ubuntu系统kubeadm安装K8S_v1.25.x容器使用docker(K8S_v1.24版本以后依然使用docker容器管理)

安装所需要的全部文档请点击这里下载 系统是&#xff1a; rootk8s-master:~# cat /etc/lsb-release DISTRIB_IDUbuntu DISTRIB_RELEASE22.04 DISTRIB_CODENAMEjammy DISTRIB_DESCRIPTION“Ubuntu 22.04.3 LTS” rootk8s-master:~# uname -a Linux k8s-master 5.15.0-76-generi…

Spring源码系列:核心概念解析

前言 本文旨在为读者解析Spring源码中的关键类&#xff0c;以便读者在深入阅读源码时&#xff0c;能够了解关键类的作用和用途。在阅读Spring源码时&#xff0c;经常会遇到一些不熟悉的概念&#xff0c;了解关键类的作用可以帮助读者更好地理解这些概念。 BeanDefinition Be…

取个对象值导致系统崩溃

取个对象值导致系统崩溃 前言 想必各位小伙经常在项目中遇到一些错误&#xff0c;取对象值的时候&#xff0c;经常报错,又或者某些项目突然就挂经常都是出现在一些对象取值上面&#xff0c;然后就被领导一顿训斥 报错分析 例如&#xff1a; 下面这个报错大家想必不会陌生&am…

阻塞和非阻塞,同步和异步

文章目录 典型的一次IO的两个阶段IO多路复用是同步还是异步&#xff1f; 典型的一次IO的两个阶段 数据就绪和数据读写 同步&#xff1a;需要应用程序自己操作 IO多路复用是同步还是异步&#xff1f; epoll也是同步的 具体数据读取还是通过应用程序自己完成的 只有使用了特…

一波七折之寻找遗失的容器ip

最近业务有个需求&#xff0c;需要在宿主机上获取容器ip。获取ip这就不是个事&#xff0c;平凡而普通。 常用手段获取ip 常用的命令ifconfig, ip等等首先被pass&#xff0c;因为宿主机环境未知&#xff0c;这些命令可能没有。 那么只能从系统api着手。getifaddrs可以获取网卡…

掌握Python的X篇_34_Python朗读文字

各种广告中说python是人工智能的主宰&#xff0c;其实这更多是噱头的成分&#xff0c;但是python确实可以做很多的事情&#xff0c;本篇将会介绍利用pythonAI平台来合成声音。今天将会用到的是百度。 文章目录 1. baiToVoice2. 注册appid3. 合成代码 1. baiToVoice 使用百度A…