目录
Shell循环语句
概念
for循环
语法格式
批量创建用户并设置初始密码示例
批量删除用户示例操作步骤
巡检测试主机连通性示例
while循环
语法格式
批量创建、删除用户示例
随机数
控制随机数范围
0 ~ 999
0 ~ 99
0 ~ 9
使用while和随机数实现猜价格示例
until循环
语法格式
示例
脚本调试
Shell函数
概念
类型
无参函数
函数内变量的作用范围
递归函数
阶乘案例
数组
命令示例
命令总结
Shell循环语句
概念
重复执行一段代码,直到满足特定条件为止
循环语句是Shell脚本中的一种控制结构,用于重复执行一段代码块。通过循环,可以在满足特定条件的情况,反复执行相同或类似的任务。
通过合理使用循环语句,可以简化脚本编写,提高代码的可读性和效率。
for循环
语法格式
- i 是一个变量,在循环过程中会依次取取值列表中的每一个值。,每次迭代时,i 都会被赋予当前列表中的一个值。
- (取值列表) 是一组值,可以是具体的字符串、数值,或是通过命令产生的一组值。注意,实际使用时不需要括号,例如:for i in users.list
- do 表示开始一个代码块,代码块中的代码将在循环的每次迭代中执行一次。
- done 标志着for循环的结束
批量创建用户并设置初始密码示例
新建取值列表文件
写入要新建用户的名称
因为for循环运行时是 以行为单位取值的,所以每个对象单独占用一行
新建脚本文件
添加如下内容
给该脚本添加执行权
查看用户信息文件
可以看到列表中的用户都被创建出来了
批量删除用户示例操作步骤
修改脚本文件内容,使用 userdel -r 删除用户以及该用户的家目录,并丢弃输出信息
运行脚本,查看文件,刚才创建的用户也没有了
巡检测试主机连通性示例
和刚才一样,首先需要一个存放IP地址的主机列表
新建编辑脚本文件添加如下内容
使用 bash 命令测试脚本
while循环
特点:不需要取值列表,但是容易进入死循环
语法格式
- 条件 是一个表达式,通常涉及变量和比较操作符,例如 $i -lt 10($i 小于 10)。
- 当条件为真(非零)时,do后面的命令序列会被执行;否则循环终止。
批量创建、删除用户示例
新建编辑脚本文件,内容如下
其中的 ${PRE}$i 表示拼接变量的值,使用 ${ } 大括号是为了明确变量的范围
如果你直接写 $PRE$i bash解释器会尝试解析 名为 PREi 的变量
测试脚本,查看系统存储用户账号信息的文件
修改脚本内容为批量删除
运行脚本并查看 /etc/passwd 文件
随机数
在 0 ~ 32767 范围内随机一个数字,总数有32768个
控制随机数范围
用 $RANDOM 变量做取余运算
0 ~ 999
如果想控制$RANDOM变量在 0 ~ 999 的范围内随机
如果要包含1000 就和1001取余,以此类推
0 ~ 99
0 ~ 9
使用while和随机数实现猜价格示例
添加如下内容到脚本中
测试结果
until循环
until:直到
直到型循环
语法格式
满足条件退出,不满足条件循环代码块
示例
创建脚本并添加如下内容
测试结果
脚本调试
在脚本中加入 set -x 指定开始调试模式和关闭调试模式的代码区域
测试结果
常用参数 | 说明 |
set -x | 将执行脚本内容输出到终端上 |
set -n | 读取脚本但不执行,仅查询脚本语法是否有问题,如果没有语法问题就不显示任何内容,如果有问题会报错 |
set -v | 在执行脚本时,先将脚本的内容输出到终端上然后执行该脚本,如果有错误,也会给出错误提示 |
Shell函数
概念
Shell函数是一组在 Shell 脚本中定义的命令序列,可以在脚本中多次调用。函数允许封装一些特定的功能或任务,并根据需要重复利用。在 Shell 脚本中使用函数可以提高代码的可读性、复用性和维护性。
类型
- 带参函数
- 无参函数
无参函数
新建一个测试脚本来编写函数
定义两个函数 并在脚本内通过函数名调用指定函数
测试结果
在无参函数中添加位置参数
通过在无参函数的代码块内加入位置参数,也可以实现有参函数的效果
函数内变量的作用范围
在函数内部使用 local 变量名 来定义局部变量
递归函数
在函数内部调用本函数
阶乘案例
数组
数组是一种用于存储多个数值或字符串的数据结构
多个数据的集合,按顺序排列起来就构成了一个数组
命令示例
声明一个数组
输出数组内数据的个数
输出数组中指定索引(下标)的数据
索引(下标)从0开始
遍历输出数组中每个值(每个值是单独的字符串)
输出整个数组的值(将所有值整合为一个字符串)
数组切片,从第几位下标开始输出,输出的个数
替换输出时指定值的下标值为88
需要注意的是实际数组的数据没有被替换,只是输出的时候改变
删除数组中指定下标的值
使用 unset 命令删除指定数组
命令总结
命令 | 说明 |
array=(val1 val2 val3) | 声明名为array的数组并赋值 |
echo ${#数组名[@]} | 输出数组中数据个数 |
echo ${数组名[@]} | 遍历输出数组所有内容,每个值都是单独的字符串 |
echo ${数组名[*]} | 将所有值合为一整个字符串并输出数组所有内容, |
echo ${数组名[下标]} | 输出数组中执行下标的值 |
echo ${数组名[@]:开始下标:个数} | 从第几位下标开始输出,输出的个数 |
echo ${数组名[@]/被换值/新值} | 在输出时,指定数组中某个值替换为指定的值。不会影响实际数据 |
unset 数组名[下标] | 删除数组中指定下标的值 |
unset 数组名 | 删除指定数组 |