自动化测试-基础知识—Bash基础

这篇具有很好参考价值的文章主要介绍了自动化测试-基础知识—Bash基础。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Bash

在 Bash 中,美元符号 $ 可以用于引用变量或者表达式的值。Bash 中的变量并不需要事先声明,而是在第一次赋值时自动创建。基于这个特性,我们可以通过给变量名加上 $ 的方式来引用它的值,比如 $var 表示引用变量 var 的值。

在 Bash 中,使用 $ 还有其他一些常见的用法,例如:

  • $0:表示执行当前脚本的文件名,也就是脚本的第一个参数;
  • $1$2 等:表示脚本的第 1、2 个参数;
  • $#:表示传递给脚本的参数个数;
  • $?:表示上一个命令的返回值,在 Linux 系统中,0 表示成功,非零表示失败。

另外,Bash 中还支持一些特殊符号,例如:

  • $$:表示当前进程的进程 ID;
  • $!:表示最近一个后台作业(通过 & 运行的命令)的进程 ID;
  • $* 或 $@:表示所有传递给脚本的参数,区别在于前者将所有参数看成一个字符串,后者将每个参数视为独立的字符串。

除了以上用法之外,Bash 中还有很多其他的用法,例如用于替换命令行的通配符 $(),用于引用环境变量的 ${var},等等。总之,美元符号 $ 是 Bash 中一个非常重要的特性,掌握好它的用法可以更加方便地编写脚本和命令行操作。

条件选择、判断

条件选择if

if 判断条件 1 ; then

  条件为真的分支代码

elif 判断条件 2 ; then

  条件为真的分支代码

elif 判断条件 3 ; then

  条件为真的分支代码

else

  以上条件都为假的分支代码

fi

判断年龄

#!/bin/bash

read -p "请输入年龄:" age

# 判断 age 中是否包含非数字字符
if [[ "$age" =~ [^0-9]+ ]]; then
  echo "输入的年龄必须是数字"
  exit 1
fi

# 将 age 转换为数字,并判断范围
if (( age < 18 || age > 150 )); then
  echo "输入的年龄必须在 18 到 150 之间"
else
  echo "输入的年龄为 $age"
fi

条件判断 case

case $name in;

PART1)

  cmd
;;

PART2)

  cmd
 ;;
*)
  cmd
;;
esac

判断yes or no

#!/bin/bash

read -p "请输入 yes 或 no:" answer

# 将 answer 转换为小写字母
answer=$(echo "$answer" | tr '[:upper:]' '[:lower:]')

# 判断输入是否为 "yes"
if [[ "$answer" = y || "$answer" = yes ]]; then
  echo "输入为 yes"
# 判断输入是否为 "no"
elif [[ "$answer" = n || "$answer" = no ]]; then
  echo "输入为 no"
else
  echo "无法识别输入"
fi

#!/bin/bash

echo "请输入yes或no,可以回答 Y/y/yes/YES 或 N/n/no/NO:"
read answer

case "$answer" in
#正则:以大写或小写的y开头,后面跟着大写或小写的e,再后面跟着大写或小写的s,组成的字符串。
  [Yy][Ee][Ss]|[Yy])
    echo "你回答的是yes"
    ;;
  [Nn][Oo]|[Nn])
    echo "你回答的是no"
    ;;
  *)
    echo "你的回答无效"
    ;;
esac

四个循环

for循环

用法格式

for name in 列表 ;do

  循环体

done

for (( exp1; exp2; exp3 )) ;do

  cmd

done

案例

求出(1+2+...+n)的总和
#!/bin/bash

# 读取用户输入的数字,判断是否为正整数
# `-ge`:是比较运算符,表示“大于等于”的关系;
# '-eq':是比较运算符,表示“等于”的关系
while true
do
    read -p "请输入一个大于等于 1 的正整数: " num
    if [[ $num =~ ^[0-9]+$ ]]; then
        if [ $num -ge 1 ]; then
            break
        fi
    fi
done

# 初始化总和为 0
sum=0

# 使用一个 for 循环累加 1 到 num 的数字
for ((i=1;i<=num;i++))
do
    sum=$((sum+i))
done

# 输出结果
echo "1 到 $num 的数字之和为:$sum"

/***
以上代码中,我们使用 while 循环不断读取用户输入的数字,判断其是否为正整数。如果用户输入了非数字字符,或者输入的数字小于 1,程序将提示用户重新输入。当用户输入的数字符合要求时,程序才会继续执行。然后,代码和之前一样,使用 for 循环从 1 到 num 累加,并输出结果。

注意,使用 `[[ $num =~ ^[0-9]+$ ]]` 的正则表达式来验证用户输入是否为数字,其中 `^` 表示行的开头,`$` 表示行的结尾,`[0-9]+` 表示数字出现一次或多次。

在上面的代码中,我们使用 `[ $num -ge 1 ]` 条件表达式来判断用户输入的数字是否大于等于 1,如果成立,则符合要求,退出循环;否则,提示用户重新输入。
***/
求出 1-100 中所有奇数的和
#!/bin/bash

# 定义变量 sum,用于保存奇数和
sum=0

# 使用 for 循环依次遍历 1 到 100 的数字
for ((i=1; i<=100; i++)); do
  # 判断当前数字是否为奇数,如果是则将其加到 sum 中去
  if [[ $((i % 2)) -eq 1 ]]; then
    sum=$((sum + i))
  fi
done

# 输出结果
echo "1 到 100 中所有奇数的和为:$sum"

/***
首先,我们定义了一个变量 sum,用于保存奇数和的结果。然后使用 for 循环遍历 1 到 100 的数字,每次循环检查当前数字是否为奇数,如果是则将其加到 sum 中。最后,使用 echo 输出结果。

其中,`[[ $((i % 2)) -eq 1 ]]` 是一个条件表达式,用于判断当前数字是否为奇数。`$((i % 2))` 表示取 i 对 2 取模的结果,如果这个结果为 1,则说明 i 是奇数,条件表达式返回真;否则条件表达式返回假,不执行循环体中的语句。

注意,上述程序中使用了双括号 `(())` 进行算术运算,比如 `sum=$((sum + i))` 表示将 sum 和 i 相加的结果赋值给 sum。另外,在 Bash 中,循环体必须用 `do` 和 `done` 关键字括起来,判断语句需要用 if 关键字开头。
***/

while循环

用法格式

while 循环控制条件 ;do

  循环

done

循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件为“true” ,则执行一次循环;直到条件测试状态为“false” 终止循环

特殊用法(遍历文件的每一行)

while read line; do控制变量初始化

  循环体

done < /PATH/FROM/SOMEFILE

或cat /PATH/FROM/SOMEFILE | while read line; do

  循环体

done

依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将行赋值给变量line

案例-100以内所有正奇数之和

#!/bin/bash

sum=0
i=1

while [ $i -le 100 ]
do
  read -p "请输入一个数:" num
  if [[ ! "$num" =~ ^[0-9]+$ ]]; then
    echo "输入错误,请重新输入数字!"
  else
    if [ $((num % 2)) -ne 0 ]; then
      sum=$((sum + num))
    fi
    i=$((i + 1))
  fi
done

echo "100以内所有正奇数之和为:$sum"

/***
[[ ! "$num" =~ ^[0-9]+$ ]] 是一个 Bash 条件测试语句,用于判断 $num 是否为纯数字字符串。下面对其进行逐一解释:

[[ ... ]] :这是 Bash 特有的条件测试结构,其中 ... 就是待测试的条件表达式。
! :逻辑非运算符,表示取相反值。
"$num" :将变量 $num 的值作为一个整体传递给条件测试命令。使用双引号可以确保 $num 中包含空格等特殊字符时依然能够正确处理。
=~ :匹配运算符,用于测试是否符合正则表达式。
^[0-9]+$ :正则表达式,表示整个字符串必须全部由数字组成。其中 ^ 表示匹配行首,[0-9]+ 表示匹配一或多个数字,$ 表示匹配行尾。
因此,整个条件测试语句的含义可以理解为“如果 $num 不是由 1 个或多个数字组成,则返回真(即不符合条件)”。在条件测试中,如果条件为真,则返回 1;否则返回 0。由于上述条件语句中使用了逻辑非运算符 !,因此实际上表示的是 $num 为非纯数字字符串,如果符合条件,则返回真,否则返回假。因此,[[ ! "$num" =~ ^[0-9]+$ ]] 的含义是:如果 $num 不是纯数字字符串,则输出错误信息。
***/

until 循环

用法格式

unitl 循环条件a; do

  循环

done

进入条件:循环条件为true ;退出条件:循环条件为false;刚好和while相反,所以不常用,用while就行。

案例-监控xiaoming用户,登录就杀死

#!/bin/bash

# 定义被监控的用户名
TARGET_USER="xiaoming"

until who | grep -q $TARGET_USER; do
  sleep 0.5
done

# 当检测到用户登录时,kill 掉该用户的所有进程
pkill -u $TARGET_USER

# 退出脚本
exit 0

/***
上述脚本中,使用 `until` 循环对目标用户进行监控。其中 `who` 命令用于获取当前登录用户列表,`grep` 命令则用于匹配该用户是否存在于列表中。由于 `grep` 命令默认会输出匹配到的文本,因此需要使用 `-q` 选项来将输出屏蔽掉,从而只在匹配成功时才能返回真。

当检测到用户登录后,使用 `pkill` 命令杀死该用户的所有进程。最后,使用 `exit` 命令退出脚本。

可以将上述脚本保存为文件,如 `monitor_user.sh`,然后使用 `chmod +x monitor_user.sh` 命令将其设置为可执行文件。运行该脚本后,它会每隔 0.5 秒扫描一次登录用户列表,直到发现 `xiaoming` 用户登录,之后就会杀死该用户的所有进程并退出脚本。
***/

select 循环与菜单

用法格式

select variable in list

do

  循环体命令

done

① select 循环主要用于创建菜单,按数字顺序排列的示菜单项将显示在标准错误上,并显示PS3 提示符,等待用户输入

② 用户输入菜单列表中的某个数字,执行相应的命令

③ 用户输入被保存在内置变量 REPLY 中

④ select 是个无限循环,因此要记住用 break 命令退出循环,或用 exit 命令终止脚本。也可以按 ctrl+c退出循环

⑤ select 经常和 case 联合使用

⑥ 与for循环类似,可以省略 in list, 此时使用位置参量

案例

#!/bin/bash

# 定义菜单列表
menu=("面包 ¥2" "牛奶 ¥3" "咖啡 ¥5" "鸡蛋 ¥1" "退出")

# 显示菜单,直到用户选择退出
while true; do
  # 输出菜单列表
  echo "请选择要购买的商品(输入序号): "
  for i in "${!menu[@]}"; do
    echo "$((i+1))) ${menu[$i]}"
  done
  
  # 等待用户输入选项
  read -r choice
  if [ "$choice" == "${#menu[@]}" ]; then
    # 如果选择了最后一项"退出",则退出循环
    echo "再见!"
    exit 0
  elif [ "$choice" -gt 0 ] && [ "$choice" -lt "${#menu[@]}" ]; then
    # 如果选择了菜单中的某一项,则显示其价格并回到循环开头
    item="${menu[$choice-1]}"
    price=$(echo "$item" | awk '{print $2}' | sed 's/¥//')
    echo "您选择了:$item,价格为 $price 元。"
  else
    # 如果输入了无效的选项,则输出错误提示信息并回到循环开头
    echo "错误的选项,请重新选择!"
  fi
done


/***
在上述脚本中,首先定义了一个菜单列表 `menu`,其中每个菜品都附带有相应的价钱。接着,使用 `PS3` 变量设置了 `select` 命令的提示符,这里设置为“请选择要购买的商品(输入序号): ”。然后,在一个无限循环中,使用 `select` 命令生成菜单,并等待用户选择。

当用户输入选项序号时,`select` 命令会将选项对应的值存储在 `$REPLY` 变量中。由于最后一项是退出选项,因此可以使用 `${#menu[@]}` 来获取菜单列表的长度,从而判断是否选择了退出选项。如果选择了退出,则输出“再见!”并使用 `exit` 命令退出脚本。

如果选择了菜单中的某一项,则使用 `echo` 命令显示该项内容,并通过 `break` 命令跳出当前循环,回到上层循环。如果输入了无效的选项,则也会输出错误提示信息并直接回到循环开头,等待用户重新输入。

注意,在菜单列表中,每个菜品的价格都附带了人民币符号“¥”。因此,在输出选中的菜品价格时,需要对其进行截取和转换。可以使用 Bash 的字符串截取功能 `${item:(-1)}` 来提取字符串最后一位(即价格),然后再使用算术运算 `$((...))` 将其转换为数字类型,并除以 100 转换为元。例如,对于选中的菜品 `面包 ¥2`,可以使用以下代码来输出其价格:
***/

九九乘法表

#!/bin/bash

for i in {1..9}; do
  for j in $(seq 1 $i); do
    # 计算并输出乘积
    result=$((i*j))
    printf "%dx%d=%-2d " $j $i $result
  done
  # 在每行的末尾添加一个换行符
  echo ""
done

/***
- 我们使用了 `seq` 命令来遍历每一行中的乘数。此命令会生成从 1 到 `$i` 的整数序列,其中 `$i` 是当前正在打印的乘数。
- 在输出结果时,我们使用了与之前相同的 `printf` 命令,但是在格式字符串中增加了一个换行符。这样就可以使每个乘积占据单独一行,并增加输出结果的可读性。
/***

彩色等腰三角形

#!/bin/bash

# 定义三角形高度和颜色数组
height=10
colors=("\033[31m" "\033[32m" "\033[33m" "\033[34m")

# 循环遍历每一行
for ((i=1; i<=$height; i++)); do

  # 计算所需填充的空格数量
  spaces=$(( 2*($height - $i) ))

  # 输出空格
  for ((j=1; j<=$spaces; j++)); do
    echo -n " "
  done

  # 计算所需填充的星号数量
  stars=$((2*i-1))

  # 输出星号
  for ((j=1; j<=$stars; j++)); do
    # 选择颜色
    color=${colors[((i-1)%${#colors[@]})]}
    echo -en "$color* \033[0m"
  done

  # 换行
  echo ""
done

/***
在这个代码中,我们定义了一个变量 `$height` 来指定三角形的高度,并定义了一个 `$colors` 数组来为三角形中的星号选择不同的颜色。在循环中,我们计算了所需的空格和星号数量,并使用 `echo -n` 输出适当数量的空格。对于星号,我们也使用了一个循环来输出适当数量的星号,并使用 `$colors` 数组为每个星号选择正确的颜色。最后,我们使用 `echo ""` 来在每行末尾输出一个换行,确保每行之间都有一个空白行。
***/

推荐阅读:
https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA
https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g
参考文章:https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA文章来源地址https://www.toymoban.com/news/detail-460788.html

到了这里,关于自动化测试-基础知识—Bash基础的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Selenium自动化测试实战之自动化测试基础

    自动化测试概念 是把以人为驱动的测试转化为机器执行的一种过程,它是一种以程序测试程序的过程。 自动化只是测试方式,跟测试阶段无关。 可以把任何测试工作写一个程序自动化实现都可以称为自动化测试。 selenium自动化测试: 2023最新的Selenium自动化测试实战,没有比

    2024年02月13日
    浏览(69)
  • 5分钟掌握接口自动化测试,4个知识点简单易学!

    接口测试是一种软件测试方法,用于验证不同软件组件之间的通信接口是否按预期工作。在接口测试中,测试人员会发送请求并检查接收到的响应,以确保接口在不同场景下都能正常工作。 就工具而言,常见的测试工具有Jmeter、Postman等。但这类工具往往更是做接口调试,对

    2024年02月05日
    浏览(57)
  • 软件测试之单元测试自动化入门基础

    所谓的单元测试(Unit Test)是根据特定的输入数据,针对程序代码中的最小实体单元的输入输出的正确性进行验证测试的过程。所谓的最小实体单元就是组织项目代码的最基本代码结构: 函数,类,模块 等。在Python中比较知名的单元测试模块: unittest pytest doctest nose 所谓的测试

    2024年02月03日
    浏览(48)
  • 【接口自动化测试入门】接口测试基础(超详细~)

    1、http请求头和响应头包含那些内容? 请求头信息 请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。 2、常用的请求报头如下: Accept:浏览器可接受的MIME类型。 l MIME用于设定某种扩展名的文件用哪种应用程序来打开的方式类型,当该扩展名文件被

    2024年02月16日
    浏览(41)
  • 【自动化测试入门】用Airtest - Selenium对Firefox进行自动化测试(0基础也能学会)

    本文将详细介绍如何使用AirtestIDE驱动Firefox测试,以及脱离AirtestIDE怎么驱动Firefox(VScode为例)。看完本文零基础小白也能学会Firefox浏览器自动化测试!!! 对于Web自动化测试,目前AirtestIDE支持chrome浏览器和Firefox2种浏览器,今天我们重点聊一下,如何使用AirtestIDE驱动Firef

    2024年02月07日
    浏览(43)
  • 接口自动化测试:pytest基础讲解

    只靠前端测试很难确保很⾼的覆盖率。接⼝测试,可以模拟出各种类型的⼊参,包括⼀些在前端模拟不出来的⼊参,还能根据接⼝⽂档的定义,设计出相对完善的⼊参值,在接⼝层保证质量,剩余的绝⼤多数问题就是应⽤程序⾃⾝的交互和数据展⽰问题。 接⼝测试相对于交互

    2024年02月07日
    浏览(54)
  • 【自动化测试入门】Selenium基础(建议收藏)

    1、什么是 Selenium Selenium  是支持  Web  浏览器自动化的一系列工具和库的综合项目。 它提供了扩展来模拟用户与浏览器的交互,用于扩展浏览器分配的分发服务器, 以及用于实现  W3C WebDriver  规范的基础结构, 该 规范 允许您为所有主要  Web  浏览器编写可互换的代码。

    2024年02月09日
    浏览(50)
  • Python爬虫技术之Selenium自动化测试及模拟点击页面爬虫最全知识

    Selenium是一套Web网站的程序自动化操作解决方案(比如点击界面按钮,在文本框中输入文字等操作) Selenium的自动化原理如下 3.1 下载selenium库的命令 3.2 下载谷歌浏览器Chrome对应的驱动 驱动库网址:http://chromedriver.storage.googleapis.com/index.html 注意:根据自己的Chrome版本进行选择

    2024年01月16日
    浏览(75)
  • 基于web应用的UI自动化、跨浏览器测试、测试结果分析:Selenium 开源的自动化测试工具基础教程

    作者:禅与计算机程序设计艺术 Selenium是一个开源的自动化测试工具,它提供了基于web应用的UI自动化、跨浏览器测试、测试结果分析等功能。它提供的功能包括:自动化控制浏览器、操纵表单、点击链接及按钮、验证页面元素、执行JavaScript代码、生成PDF文件、模拟移动设备

    2024年02月09日
    浏览(48)
  • Selenium基础 — Selenium自动化测试框架介绍

    Selenium是一个用于Web应用程序测试的工具。 只要在测试用例中把预期的用户行为与结果都描述出来,我们就得到了一个可以自动化运行的功能测试套件。 Selenium测试套件直接运行在浏览器中,就像真正的用户在操作浏览器一样。 Selenium也是一款同样使用Apache License 2.0协议发布

    2024年02月02日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包