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

编程有点难不难 2024-09-06 11:32:48

本文转自测试人社区,原文链接:

一、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_1Array_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]=harryecho "arr indexs is ${!arr[@]}"1.4 控制语句

1.4.1 if 循环

# 单条件if [ expression ];thenstatementsfi# 多条件与if [ expression_1 ] && [ expression_2 ];thenstatementsfi# 多条件或if [ expression_1 ] || [ expression_2 ];thenstatementsfi# 多分支if [ expression_1 ] ;thenstatementselif [ expression_2 ] ;thenstatementselsestatementsfi

1.4.2 for 循环

for variable in listdocommandsdone//或for (( expression1; expression2; expression3 ))docommandsdone

for循环范围:

for num in {10..0..1}doecho $numdone

for循环数组:

arr=( "Welcome" "to" "hogwarts" )for i in "${arr[@]}"doecho $idone# @ 与 * 的区别for i in ${arr[@]}doecho $idonefor i in ${arr[*]}doecho $idonefor i in "${arr[*]}"doecho $idone

表达式for循环:

for ((i=1; i<=10; i++))doecho "$i"done

1.4.3 while 循环

while [ expression ];docommands;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.shvim或者vi bash_script.sh写入代码#!/bin/bashecho "Hello Bash"### 2.2 Bash执行- `chmod +x bash_script.sh`- `./bash_script.sh`2.3 Bash注释单行注释:注释段落的开头使用 #。多行注释:在<<BLOCK和BLOCK之间的内容会被当成注释;在:"中的内容会被当成注释。2.4 read命令read命令是用于从终端或者文件中,读取输入的内部命令;格式:read <variable_name>;read常用参数:-p命令行选项在同一行输入;-s静默输入;-a对数组进行多个输入。

2.4.1 read读取单个或多个变量

echo "Enter the your name: "read user_nameecho "Your name is $user_name"echoecho "Enter your age, phone and address: "read age phone addressecho "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.shchmod +x test.shvim test.sh#!/bin/bashecho "Hello Bash" > test.txt2.7 Bash与目录操作命令结合# 创建目录并生成文件mkdir testcd testecho "hello" > test.txtls2.8 Bash与内存操作结合#!/bin/bashfor i in `ps aux | awk '{print $6}'|grep -v 'RSS'`do count=$[ $count+$i ]doneecho "$count/kb"2.9 脚本中编写函数脚本中编写了函数,需要在脚本中调用才会执行;函数如果涉及传参,需要在调用函数时带上参数。

0 阅读:0

编程有点难不难

简介:感谢大家的关注