当前位置: 首页 > news >正文

7. if 条件语句的知识与实践

7. if 条件语句的知识与实践

7.1 if 条件语句

if条件语句是Linux运维人员在实际工作中最常用也是最重要的语句,就像我们日常生活中的“如果…那么…”判断一样简单直观。让我们一起来掌握这个强大的工具吧!

7.1.1 if 条件语句的语法

1. 单分支结构

第一种语法:清晰明了

bash

if <条件表达式>then 指令
fi

第二种语法:简洁紧凑

bash

if <条件表达式>;then指令
fi

这里的<条件表达式>可以是test、[]、[[]]、(())等条件表达式,甚至可以直接使用命令。每个if语句都以if开头,带有then,最后以fi结束。

小提示:第二种语法中的分号相当于换行符,两种语法效果相同,选择你喜欢的即可。

记忆技巧:想象女孩对男孩说:

bash

如果 你有房;那么我就嫁给你
果如

if单分支语句执行流程如下:

在这里插入图片描述

实用示例:检查并创建目录

bash

#!/bin/bash
# 检查/tmp/laoma目录是否存在,如果不存在则创建
if [ ! -d /tmp/laoma ];thenmkdir /tmp/laomaecho "目录已创建"
fi
2. 双分支结构

双分支结构就是:“如果…,那么…,否则…”

bash

if <条件表达式>;then指令集1
else指令集2
fi

if双分支语句执行流程:

在这里插入图片描述

记忆技巧:女孩对男孩说:

bash

如果 你有房;那么我就嫁给你
否则我再考虑考虑
果如

实用示例:检查SSH服务状态

bash

#!/bin/bash
# 检查sshd服务是否运行
if systemctl is-active sshd &>/dev/null;thenecho "SSH服务正在运行"
elseecho "SSH服务未运行,正在启动..."systemctl start sshd
fi
3. 多分支结构

多分支结构允许更复杂的条件判断:

bash

if <条件表达式1>;then指令1
elif <条件表达式2>;then指令2
else指令3
fi

if多分支语句执行流程:

在这里插入图片描述

记忆技巧:女孩对男孩说:

bash

如果 你有房;那么我就嫁给你
或者 你有钱;那么我也可以嫁给你
否则我再考虑考虑
果如

实用示例:服务管理脚本

bash

#!/bin/bash
# 通过参数控制sshd服务
if [ "$1" == "start" ];thensystemctl start sshdecho "SSH服务已启动"
elif [ "$1" == "stop" ];thensystemctl stop sshdecho "SSH服务已停止"
elif [ "$1" == "status" ];thensystemctl status sshd
elseecho "Usage: $0 start|stop|status"
fi

7.1.2 if条件语句多种条件表达式语法

if语句支持多种条件表达式,选择适合你的那种:

1. test条件表达式

bash

if test 表达式;then指令
fi
2. []条件表达式

bash

if [ 字符串或算术表达式 ];then指令
fi
3. [[]]条件表达式

bash

if [[ 字符串或算术表达式 ]];then指令
fi
4. (())条件表达式

bash

if ((算术表达式));then指令
fi
5. 命令表达式

bash

if 命令;then指令
fi

建议:选择一种你习惯的表达式并保持一致,这样代码更易维护。

7.1.3 if条件语句实践

示例1:监控内存并报警

bash

#!/bin/bash
# 每3分钟检查系统内存,低于100M时发邮件报警
FreeMem=$(free -m | awk 'NR==2 {print $4}')
if [ $FreeMem -lt 100 ];thenecho "内存不足,当前可用内存: ${FreeMem}M" | mail -s "内存警报" root@localhost
fi

示例2:数字比较脚本

bash

#!/bin/bash
# 比较两个数字的大小
read -p "请输入两个数字: " a bif [ $a -lt $b ];thenecho "$a < $b"
elif [ $a -eq $b ];thenecho "$a = $b"
elseecho "$a > $b"
fi

7.2 if条件语句企业案例精讲

7.2.1 监控Web和数据库服务

在实际工作中,我们经常需要监控重要服务的状态。下面是一个实用的监控示例:

bash

#!/bin/bash
# 监控MySQL服务
if ss -lnt | grep -q ':3306';thenecho "$(date) - MySQL服务运行正常"
elseecho "$(date) - MySQL服务异常,正在重启..."systemctl restart mariadb
fi# 监控Web服务
if wget --timeout=10 --tries=2 http://localhost -q;thenecho "$(date) - Web服务运行正常"
elseecho "$(date) - Web服务异常,正在重启..."systemctl restart httpd
fi

7.2.2 判断字符串是否为数字

在工作中,我们经常需要验证输入是否为数字:

bash

#!/bin/bash
# 方法1:使用正则表达式
if [[ $1 =~ ^[0-9]+$ ]];thenecho "$1 是数字"
elseecho "$1 不是数字"
fi# 方法2:使用sed替换
if [ -z "$(echo $1 | sed 's/[0-9]//g')" ];thenecho "$1 是数字"
elseecho "$1 不是数字"
fi

7.2.3 开发Rsync服务管理脚本

下面是一个完整的服务管理脚本示例:

bash

#!/bin/bash
# Rsync服务管理脚本# 检查参数数量
if [ $# -ne 1 ];thenecho "Usage: $0 {start|stop|restart|status}"exit 1
ficase "$1" in
start)rsync --daemonsleep 2if ss -lnt | grep -q ':873';thenecho "Rsync服务启动成功"elseecho "Rsync服务启动失败"fi;;
stop)pkill rsyncsleep 2if ! ss -lnt | grep -q ':873';thenecho "Rsync服务已停止"elseecho "Rsync服务停止失败"fi;;
restart)pkill rsyncsleep 2rsync --daemonecho "Rsync服务已重启";;
status)if ss -lnt | grep -q ':873';thenecho "Rsync服务正在运行"elseecho "Rsync服务未运行"fi;;
*)echo "Usage: $0 {start|stop|restart|status}"exit 1;;
esac

提示:将这个脚本保存为/etc/init.d/rsyncd,并添加执行权限,就可以使用service rsyncd start|stop|restart|status来管理服务了。

ync
sleep 2
rsync --daemon
echo “Rsync服务已重启”
;;
status)
if ss -lnt | grep -q ‘:873’;then
echo “Rsync服务正在运行”
else
echo “Rsync服务未运行”
fi
;;
*)
echo “Usage: $0 {start|stop|restart|status}”
exit 1
;;
esac


> **提示**:将这个脚本保存为`/etc/init.d/rsyncd`,并添加执行权限,就可以使用`service rsyncd start|stop|restart|status`来管理服务了。通过本章的学习,相信你已经掌握了if条件语句的核心用法。记住,编程就像学骑自行车,多练习才能熟练掌握。在实际工作中多加运用,你一定会成为Shell脚本高手!
http://www.dtcms.com/a/342353.html

相关文章:

  • 三层交换机
  • CMake2: CMakeLists.txt的常用命令
  • 5.6 element ui
  • 计算机网络技术-第六章
  • STM32 TIM_CtrlPWMOutputs函数
  • 两种单例模式
  • 分享一个免费开源的网站跟踪分析工具Open-Web-Analytics(和GoogleAnalytics一样)
  • 3D 环形旋转图片轮播(纯html,css,js)
  • Docker:安装配置
  • Unity编辑器相关
  • 类加载问题与内存泄漏排查:隐藏在元数据区的致命陷阱
  • electron-vite_18Less和Sass共用样式指定
  • 超级 APP:重构多平台运营生态,一站式解决用户与商家痛点
  • Java性能优化:JVM工具与Tomcat调优实战
  • 批量收藏Chrome浏览器中打开的多个标签页快捷方法
  • 12_Go语言项目架构与工程实践
  • 手机惊魂
  • 《用餐》,午餐食堂即景小诗分享(手机/小视频/光盘/养生)
  • mysql第四章使用DQL命令查询数据(二)
  • MinerU:重新定义PDF智能提取的开源利器
  • PDF翻译软件哪个好?用对工具翻译无障碍
  • 计算机视觉第一课opencv(三)保姆级教学
  • 微信小程序基础Day1
  • Ubuntu 22.04 安装tensorrt
  • Building Systems with the ChatGPT API 使用 ChatGPT API 搭建系统(第五章学习笔记及总结)
  • Vue3源码reactivity响应式篇之Map、Set等代理处理详解
  • OpenCVSharp 核心功能模块详解:从基础操作到实战应用
  • 2025-08-21 Python进阶5——类和对象
  • Visual Studio 在机台上远程调试详细教程
  • LeetCode 反转链表