阶段十:shell脚本之流程结构语句

一、Shell流程结构

什么是流程结构?

流程结构:就是指计算机以什么样的顺序执行这些程序。

流程结构分类

程序有三大流程结构分别是:顺序结构、选择结构、循环结构

image

小结:

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

命令作用:

执行结果:

关键参数:

注意事项:


运行结果:

![](/assets/feishu-images/8c60147e53adbdc8b5dbaf2c.png)

If...elif...else结构基本语法:


注释:
    如果条件1满足,执行命令1后结束;
    如果条件1不满足,再看条件2,如果条件2满足执行命令2后结束;
    如果条件1和条件2都不满足执行命令3结束.

运行原理图:

image

案例:判断数字位于哪个范围,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


运行原理:

![](/assets/feishu-images/76a48e36441ebcc94dd9b5c1.jpg)

案例:判断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架构设计:

image

传统安装

安装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、配置示例时,请以飞书源文档和实际环境执行结果为准。