阶段十:shell脚本之流程结构语句
一、Shell流程结构
什么是流程结构?
流程结构:就是指计算机以什么样的顺序执行这些程序。
流程结构分类
程序有三大流程结构分别是:顺序结构、选择结构、循环结构

小结:
Shell脚本一共支持三种流程结构:(顺序结构)、(选择结构)和(循环结构)
二、if选择结构
If选择结构
If结构基本语法:
if [ condition ];then
command
command
fi
或
[ 条件 ] && command案例:磁盘使用率告警
#!/bin/bash
# 获取当前硬盘使用百分比
disk_usage=$(df / | grep / | tr -s ' ' | cut -d ' ' -f5)
# 去掉百分号
disk_usage_no_percent=$(echo "$disk_usage" | tr -d '%')
# 设置硬盘使用警告阈值
threshold=80
# 判断硬盘使用是否超过阈值
if [ $disk_usage_no_percent -gt $threshold ]; then
echo "警告:磁盘使用超过 $threshold% ! 当前使用:$disk_usage"
fi命令作用:
- 把命令后的文本或变量展开结果写到标准输出;配合
>或>>时会改为写入文件,前者覆盖、后者追加。
执行结果:
- 成功后文本或变量展开结果会输出到终端;带重定向时会写入目标文件。
关键参数:
注意事项:
或
运行结果:

If...elif...else结构基本语法:
注释:
如果条件1满足,执行命令1后结束;
如果条件1不满足,再看条件2,如果条件2满足执行命令2后结束;
如果条件1和条件2都不满足执行命令3结束.运行原理图:

案例:判断数字位于哪个范围,10以内,10-20之间,20以上
注释 变量,就是把用户输入的内容保存在变量中
最终代码:
#!/bin/bash
#1.接收要判断的数字
#2.对num进行判断关键参数:
注意事项:
思路: 3.根据逻辑用脚本语言实现
#!/bin/bash
注:pgrep命令:以名称为依据从运行进程队列中查找进程,并显示查找到的进程id
**关键参数:**
**注意事项:**
if嵌套就是用于解决多层次判断问题,语法也比较简单,就是一个if语句中又嵌入了一个if语句
疫情期间进入教室学习:经过多层次检测
进入校区(第一层判断,是否有核酸码)
进入教室(第二层判断,体温是否正常)
进入教室学习注释: 如果条件1满足,执行命令1; 如果条件2也满足,执行命令2, 如果不满足就只执行命令1结束;
如果条件1不满足,不看条件2;直接看条件3, 如果条件3满足执行命令3; 如果不满足则看条件4,如果条件4满足执行命令4; 否则执行命令5
运行原理:

案例:判断vsftpd软件包是否安装,如果没有则自动安装(yum源已配好)
#!/bin/bash注意事项:
思路:
#!/bin/bash 或者 或者
**注意事项:**
作用:case主要用于多分支判断
if...elif...else如果是2个分支或3个分支,一般可以使用if...elif...else结构
如果分支判断结构超过3个分支,一般建议采用case多分支结构
case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。
基本语法:
;;
;;
;;生产应用场景:启停脚本
案例1:当给程序传入start、stop、reload三个不同参数时分别执行相应命令。
#!/bin/bash ;; ;; ;; *) ;;
注意: |代表或含义,比如start|S,代表$1要么匹配start,要么匹配S,只要有一个满足,都会执行下方代码
**注意事项:**
#!/bin/bash
vsftpd)
;;
;;
;;
;;
httpd)
;;
*)
;;注意事项:
作用:高效重复的执行任务!!!
特点:条件为真就进入循环;条件为假就退出循环
command...
... ========================================================= 打印1-5数字 FOR循环打印:
while循环打印: i=1
while循环三步走: 第三步:在循环体内部更新计数器的值
**注意事项:**
1-100累加的和:5050
#!/bin/bash
#第一步:定义计数器
i=1
sum=0
#第二步:编写循环条件
#第三步:更新计数器的值
#第四步:当循环结束后,输出最终的sum注意事项:
#!/bin/bash #定义变量 sum=0 i=2 #循环打印1-100的偶数和并且计算后重新赋值给sum #打印sum的值
**注意事项:**
死循环(一个依靠自身控制无法终止的程序)#!/bin/bash #打印菜单
#让用户输入需要的操作 h) ;; f) ;; d) ;; m) ;; u) ;; q) ;;
**注意事项:**
需要提前安装工具`bc`、`sendmail`注意事项:
#!/bin/bash
THRESHOLD=90 EMAIL="wangjintao@itcast.cn"
{ } | sendmail -t
**注意事项:**
for循环主要用于高效循环以及列表结构的或者数组结构的遍历操作。
…或
案例:
注:{开始..结束..步长}
步长就是元素与元素之间的差值作用:专门用于接收所有的外部传递过来的参数
…
案例:
#!/bin/bash注意事项:
…
expr1:定义变量并赋初值 expr2:决定是否进行循环(条件) expr3:决定循环变量如何改变,决定循环什么时候退出
**注意事项:**
思路:
#!/bin/bash
#定义一个变量来保存奇数的和
sum=0
#打印1-100的奇数并且相加重新赋值给sum
#打印1-100的奇数和
#!/bin/bash
#定义一个变量来保存奇数的和
sum=0
#打印1-100的奇数并且相加重新赋值给sum
或者
或者
#打印1-100的奇数和
#!/bin/bash
sum=0
#!/bin/bash
sum=0
延伸:
方法1:
#!/bin/bash
sum=0
sum=$[$i+$sum]
方法2:
#!/bin/bash
sum=0
方法3:
#!/bin/bash
sum=0
或者
方法4:
sum=0
#!/bin/bash
sum=0注意事项:
作用:以下三个关键词都是用于终止或跳出循环结构。
continue:继续;表示中止本次循环,继而进入下一次循环
break:终止;表示终止整个循环结构
exit:表示终止Shell脚本的执行
案例1:
#!/bin/bash
**注意事项:**
思路:
#!/bin/bash
#判断class组是否存在
#批量创建5个用户
#!/bin/bash
#判断class组是否存在
#循环增加用户,循环次数5次,for循环,给用户设定密码
#!/bin/bash
或者注意事项:
#!/bin/bash #定义变量 ip=10.1.1 #循环去ping主机的IP 或者
并行执行: {程序}&表示将程序放到后台并行执行,如果需要等待程序执行完毕再进行下面内容,需要加wait
#!/bin/bash #定义变量 ip=10.1.1 #循环去ping主机的IP { }&
**注意事项:**
作用:让服务器与服务器之间通信不需要通过密码验证
#!/bin/bash
注意事项:
了解for循环嵌套基本语法
循环体代码
总结:
>
案例:打印一个5x5矩形
假设:
总星星数一共25个,代表整个循环一共循环25次
特点:内层每循环5次,则要进行一次换行
#!/bin/bash
#外层控制行数、内层控制列数
#外层循环1次,内层循环1轮(5次)注意事项:
*
外层一共循环5次 第1(i=1)行,打印1颗星星(内层只能循环1次) 第2(i=2)行,打印2颗星星(内层只能循环2次) 第3(i=3)行,打印3颗星星(内层只能循环3次)
#!/bin/bash #外层控制行数,一共5行 #内层控制列数(星星数量) #i=1,j<=1只能循环1次 #i=2,j<=2只能循环2次 #... #i=5,j<=5只能循环5次
**注意事项:**注意事项:
LNMP架构设计:

传统安装
安装Nginx、MariaDB、PHP、Wget
**注意事项:**注意事项:
}
}
} }
**注意事项:**
注意事项:
#!/bin/bash
DB_NAME="wordpress" DB_USER="root" DB_PASS="123"
}
}
}
**注意事项:**
分析:
#!/bin/bash
n1=$[RANDOM%10]
n2=$[RANDOM%10]
n3=$[RANDOM%10]
n4=$[RANDOM%10]
n5=$[RANDOM%10]
n6=$[RANDOM%10]
n7=$[RANDOM%10]
n8=$[RANDOM%10]
#!/bin/bash
n1=$[$RANDOM%10]
n2=$[$RANDOM%10]
n3=$[$RANDOM%10]
n4=$[$RANDOM%10]
n5=$[$RANDOM%10]
n6=$[$RANDOM%10]
n7=$[$RANDOM%10]
n8=$[$RANDOM%10]
#!/bin/bash
i=1
n1=$[$RANDOM%10]
n2=$[$RANDOM%10]
n3=$[$RANDOM%10]
n4=$[$RANDOM%10]
n5=$[$RANDOM%10]
n6=$[$RANDOM%10]
n7=$[$RANDOM%10]
n8=$[$RANDOM%10]
continue:继续,跳过本次循环,执行下一次循环
break:打断,执行循环体外的代码do..done外
exit:退出程序
#!/bin/bash
n1=$[$RANDOM%10]
n2=$[$RANDOM%10]
n3=$[$RANDOM%10]
n4=$[$RANDOM%10]
n5=$[$RANDOM%10]
n6=$[$RANDOM%10]
n7=$[$RANDOM%10]
n8=$[$RANDOM%10]
#!/bin/bash
n1=$[$RANDOM%10]
n2=$[$RANDOM%10]
n3=$[$RANDOM%10]
n4=$[$RANDOM%10]
n5=$[$RANDOM%10]
n6=$[$RANDOM%10]
n7=$[$RANDOM%10]
n8=$[$RANDOM%10]
#!/bin/bash
count=0
n1=$[$RANDOM%10]
n2=$[$RANDOM%10]
n3=$[$RANDOM%10]
n4=$[$RANDOM%10]
n5=$[$RANDOM%10]
n6=$[$RANDOM%10]
n7=$[$RANDOM%10]
n8=$[$RANDOM%10]注意事项:
#!/bin/bash #产生一个保存用户名和密码的文件 #循环创建5个用户
或者
#!/bin/bash #产生一个保存用户名和密码的文件 #循环创建5个用户
**注意事项:**
基本语法:
选项:
-c:生成密码时使用大写字母。
-n:生成包含数字的密码。
user01:eiwaShuZo5hi
user02:eiDeih7aim9k
user03:aeBahwien8co注意事项:
本文由飞书云文档同步生成。涉及命令、SQL、配置示例时,请以飞书源文档和实际环境执行结果为准。