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 ];then
  mkdir /tmp/laoma
  echo "目录已创建"
fi
2. 双分支结构

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

bash

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

if双分支语句执行流程:

在这里插入图片描述

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

bash

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

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

bash

#!/bin/bash
# 检查sshd服务是否运行
if systemctl is-active sshd &>/dev/null;then
  echo "SSH服务正在运行"
else
  echo "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" ];then
  systemctl start sshd
  echo "SSH服务已启动"
elif [ "$1" == "stop" ];then
  systemctl stop sshd
  echo "SSH服务已停止"
elif [ "$1" == "status" ];then
  systemctl status sshd
else
  echo "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 ];then
  echo "内存不足,当前可用内存: ${FreeMem}M" | mail -s "内存警报" root@localhost
fi

示例2:数字比较脚本

bash

#!/bin/bash
# 比较两个数字的大小
read -p "请输入两个数字: " a b

if [ $a -lt $b ];then
  echo "$a < $b"
elif [ $a -eq $b ];then
  echo "$a = $b"
else
  echo "$a > $b"
fi

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

7.2.1 监控Web和数据库服务

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

bash

#!/bin/bash
# 监控MySQL服务
if ss -lnt | grep -q ':3306';then
  echo "$(date) - MySQL服务运行正常"
else
  echo "$(date) - MySQL服务异常,正在重启..."
  systemctl restart mariadb
fi

# 监控Web服务
if wget --timeout=10 --tries=2 http://localhost -q;then
  echo "$(date) - Web服务运行正常"
else
  echo "$(date) - Web服务异常,正在重启..."
  systemctl restart httpd
fi

7.2.2 判断字符串是否为数字

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

bash

#!/bin/bash
# 方法1:使用正则表达式
if [[ $1 =~ ^[0-9]+$ ]];then
  echo "$1 是数字"
else
  echo "$1 不是数字"
fi

# 方法2:使用sed替换
if [ -z "$(echo $1 | sed 's/[0-9]//g')" ];then
  echo "$1 是数字"
else
  echo "$1 不是数字"
fi

7.2.3 开发Rsync服务管理脚本

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

bash

#!/bin/bash
# Rsync服务管理脚本

# 检查参数数量
if [ $# -ne 1 ];then
  echo "Usage: $0 {start|stop|restart|status}"
  exit 1
fi

case "$1" in
start)
  rsync --daemon
  sleep 2
  if ss -lnt | grep -q ':873';then
    echo "Rsync服务启动成功"
  else
    echo "Rsync服务启动失败"
  fi
  ;;
stop)
  pkill rsync
  sleep 2
  if ! ss -lnt | grep -q ':873';then
    echo "Rsync服务已停止"
  else
    echo "Rsync服务停止失败"
  fi
  ;;
restart)
  pkill rsync
  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来管理服务了。

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脚本高手!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值