0


Linux安全与高级应用(七)深入Linux Shell脚本编程:循环与分支结构的高级应用

文章目录

👍 个人网站:【 洛秋小站】【洛秋资源小站】

深入Linux Shell脚本编程:循环与分支结构的高级应用

在Linux系统管理和自动化任务中,Shell脚本是一个非常强大的工具。Shell脚本不仅能够简化日常管理任务,还能通过复杂的逻辑控制和自动化流程来提升效率。本篇博客将深入探讨Shell脚本中的循环与分支结构的高级应用,帮助读者掌握这些关键技术,以便在实际工作中灵活运用。

一、循环结构详解

循环结构是Shell脚本中常用的控制结构之一,能够实现重复执行某段代码,直到满足特定条件为止。主要包括

for

循环和

while

循环。

1.

for

循环

for

循环用于遍历一组值,并对每个值执行一系列命令。其基本格式如下:

for 变量名 in 取值列表
do
    命令序列
done

以下是一个示例,展示如何使用

for

循环批量添加用户:

#!/bin/bashULIST=$(cat /root/users.txt)forUNAMEin$ULISTdouseradd$UNAMEecho"123456"|passwd--stdin$UNAMEdone

上述脚本从

/root/users.txt

文件中读取用户名列表,然后为每个用户名创建用户,并设置初始密码。

1.1 应用示例:检查主机状态

另一个常见的

for

循环应用是批量检查主机状态。以下脚本读取IP地址列表,并使用

ping

命令检查每个主机的连通性:

#!/bin/bashHLIST=$(cat /root/ipadds.txt)forIPin$HLISTdoping-c3-i0.2-W3$IP&> /dev/null
    if[$?-eq0];thenecho"Host $IP is up."elseecho"Host $IP is down."fidone

该脚本从

/root/ipadds.txt

文件中读取IP地址列表,并通过

ping

命令检查每个IP的连通性。如果主机在线,返回“Host $IP is up.”,否则返回“Host $IP is down.”。

2.

while

循环

while

循环用于重复执行某段代码,只要条件成立就继续执行。其基本格式如下:

while 条件测试操作
do
    命令序列
done

以下是一个示例,展示如何使用

while

循环批量添加用户:

#!/bin/bashPREFIX="stu"i=1while[$i-le20]douseradd${PREFIX}$iecho"123456"|passwd--stdin${PREFIX}$i&> /dev/null
    let i++
done

上述脚本创建20个以

stu

为前缀的用户,用户编号从1到20,并设置初始密码。

2.1 应用示例:猜价格游戏

以下是一个使用

while

循环的简单猜价格游戏脚本:

#!/bin/bashPRICE=$(expr$RANDOM % 1000)TIMES=0echo"商品实际价格为0-999之间,猜猜看是多少?"whiletruedoread-p"请输入你猜测的价格数目:" INT
    let TIMES++
    if[$INT-eq$PRICE];thenecho"恭喜你答对了,实际价格是 $PRICE"echo"你总共猜测了 $TIMES 次"exit0elif[$INT-gt$PRICE];thenecho"太高了!"elseecho"太低了!"fidone

该脚本生成一个0到999之间的随机数作为商品价格,并提示用户猜测价格。根据用户输入的价格,脚本会给出“太高了”或“太低了”的提示,直到用户猜中为止。

二、分支结构详解

分支结构用于根据不同的条件执行不同的命令。主要包括

if

语句和

case

语句。

1.

if

语句

if

语句用于根据条件测试的结果执行不同的命令序列。

if

语句有单分支结构、双分支结构和多分支结构三种形式。

1.1 单分支结构

单分支结构用于在条件成立时执行一段代码,其基本格式如下:

if 条件测试操作
then
    命令序列
fi

例如,判断目录是否存在,如果不存在则创建目录:

#!/bin/bashMOUNT_DIR="/media/cdrom/"if[!-d$MOUNT_DIR]thenmkdir-p$MOUNT_DIRfi
1.2 双分支结构

双分支结构用于在条件成立时执行一段代码,而在条件不成立时执行另一段代码,其基本格式如下:

if 条件测试操作
then
    命令序列1
else
    命令序列2
fi

例如,判断主机是否存活,并显示检测结果:

#!/bin/bashping-c3-i0.2-W3$1&> /dev/null
if[$?-eq0]thenecho"Host $1 is up."elseecho"Host $1 is down."fi
1.3 多分支结构

多分支结构用于在多个条件之间进行选择,其基本格式如下:

if 条件测试操作1
then
    命令序列1
elif 条件测试操作2 
then
    命令序列2
else
    命令序列3
fi

例如,判断分数范围并分出优秀、合格和不合格三个档次:

#!/bin/bashread-p"请输入您的分数(0-100):" GRADE
if[$GRADE-ge85]&&[$GRADE-le100];thenecho"$GRADE 分!优秀"elif[$GRADE-ge70]&&[$GRADE-le84];thenecho"$GRADE 分,合格"elseecho"$GRADE 分?不合格"fi

2.

case

语句

case

语句用于针对变量的不同取值分别执行不同的命令序列,其基本格式如下:

case 变量值 in
模式1)
    命令序列1
    ;;
模式2)
    命令序列2
    ;;
    ……
* )
    默认命令序列
esac

例如,击键类型识别脚本,判断用户输入的字符是字母、数字还是其他字符:

#!/bin/bashread-p"请输入一个字符,并按Enter键确认:" KEY
case"$KEY"in[a-z]|[A-Z])echo"您输入的是 字母。";;[0-9])echo"您输入的是 数字。";;
  *)echo"您输入的是 空格、功能键或其他控制字符。"esac
2.1 应用示例:编写系统服务脚本

以下是一个使用

case

语句编写的系统服务脚本,用于启动、停止和重启服务:

#!/bin/bash# chkconfig: - 90 10# description: Startup script for sleep Servercase"$1"in
start)echo"正在启动sleep服务 ... OK";;
stop)echo"正在停止sleep服务 ... OK";;
restart)$0 stop
    $0 start
    ;;
*)echo"用法: $0 {start|stop|restart}"esac

三、综合应用案例

通过结合使用循环结构和分支结构,我们可以编写出功能强大且灵活的Shell脚本。以下是一个实际应用案例:监控服务器资源并发送告警邮件。

1. 需求描述

编写监控脚本

sysmon.sh

,在以下情况时告警:

  • 磁盘占用率超过90%
  • CPU使用率超过80%
  • 内存使用率超过90%

脚本每半小时检查一次,并通过邮件发送告警。

2. 实现思路

  • 使用dfmpstatfree等命令提取各种监控指标
  • 将各指标与正常值进行比较,保存异常情况
  • 检查异常记录,若存在则发送告警邮件
  • 设置crontab任务,定期调用sysmon.sh脚本

3. 代码实现

以下是

sysmon.sh

脚本的具体实现:

#!/bin/bash# 获取当前的时间戳timestamp=$(date +"%Y-%m-%d %H:%M:%S")# 定义告警函数send_alert(){localmessage=$1echo"$message"| mail -s"System Monitor Alert" [email protected]
}# 检查磁盘占用率disk_usage=$(df / |grep / |awk'{ print $5 }'|sed's/%//g')if[$disk_usage-gt90];then
    send_alert "[$timestamp] Disk usage is above 90%: ${disk_usage}%"fi# 检查CPU使用率cpu_usage=$(mpstat 11|grep"Average"|awk'{print 100 - $NF}')if[$(echo"$cpu_usage > 80"|bc)-ne0];then
    send_alert "[$timestamp] CPU usage is above 80%: ${cpu_usage}%"fi# 检查内存使用率memory_usage=$(free|grep Mem |awk'{print $3/$2 * 100.0}')if[$(echo"$memory_usage > 90"|bc)-ne0];then
    send_alert "[$timestamp] Memory usage is above 90%: $1.14MB%"fi

4. 设置定时任务

使用

crontab

设置每半小时执行一次

sysmon.sh

脚本:

*/30 * * * * /path/to/sysmon.sh

四、总结

Shell脚本中的循环结构和分支结构是实现自动化任务的关键工具。通过灵活运用这些工具,我们可以编写高效、可靠的脚本来处理复杂的任务。在实际应用中,结合系统的具体需求,编写适合的Shell脚本,可以极大地提高工作效率和系统稳定性。

👉 最后,愿大家都可以解决工作中和生活中遇到的难题,剑锋所指,所向披靡~

标签: linux 安全 运维

本文转载自: https://blog.csdn.net/weixin_40055370/article/details/141014962
版权归原作者 洛秋_ 所有, 如有侵权,请联系我们删除。

“Linux安全与高级应用(七)深入Linux Shell脚本编程:循环与分支结构的高级应用”的评论:

还没有评论