shell脚本流程控制之if条件判断语句

条件判断语句是一种最简单的流程控制语句。该语句使得程序根据不同的条件来执行不同的程序分支。

1.if条件语句的语法及案例

1.1 单分支结构

第一种语法:
if < 条件表达式 >
then
       指令
fi
第二种语法:
if < 条件表达式 >;then
       指令
fi

示例1:判断当前磁盘剩余空间是否有20G,如果小于20G,则将报警邮件发送给管理员,每天检查一次磁盘剩余空间。

步骤一:使用vim编辑test281.sh脚本
[root@manager ~]# vim test281.sh

#!/bin/bash
#
#********************************************************************
#Author:                Shi
#Date:                  2022-12-28
#FileName:             test281.sh
#********************************************************************

# 提取磁盘剩余空间
disk_size=`df / | grep / | awk '{print $4}'`
#磁盘提取数值单位为kb
if [ "$disk_size" <= 20971520 ];then
    mail -s Warning root << EOF
    / 分区容量低于 20GB,请及时处理!!!
    EOF
fi

步骤二:设置脚本为可执行文件

[root@manager ~]# chmod +x /root/test281.sh

 步骤三:运行检验脚本

[root@manager ~]# ./test281.sh
[root@manager ~]# ps aux |grep test281
                  //可以看到脚本正在后台运行
root        7944  0.0  0.0  12136  1100 pts/1    R+   19:00   0:00 grep --color=auto test281

要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程, 而ps命令(Process Status)就是最基本同时也是非常强大的进程查看命令.

使用该命令 可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等等.总之大部分信息都是可以通过执行该命令得到的.

如果直接用ps命令,会显示所有进程的状态,通常结合grep命令查看某进程的状态。

ps -aux输出格式:

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

格式说明:

USER: 行程拥有者

PID: pid

%CPU: 占用的 CPU 使用率

%MEM: 占用的记忆体使用率

VSZ: 占用的虚拟记忆体大小

RSS: 占用的记忆体大小

TTY: 终端的次要装置号码 (minor device number of tty)

STAT: 该行程的状态,linux的进程有5种状态:

D 不可中断 uninterruptible sleep (usually IO)

R 运行 runnable (on run queue)

S 中断 sleeping

T 停止 traced or stopped

Z 僵死 a defunct (”zombie”) process

注: 其它状态还包括W(无驻留页), <(高优先级进程), N(低优先级进程), L(内存锁页).

START: 行程开始时间

TIME: 执行的时间

COMMAND:所执行的指令

 示例2:使用curl命令访问第三题的web服务,看能否访问,如果能正常访问,则返回web server is running; 如果不能正常访问,返回12状态码。

 步骤一:使用vim编辑test2812.sh脚本

[root@manager ~]# vim test2812.sh

#!/bin/bash
#
#********************************************************************
#Author:                Shi
#Date:                  2022-12-28
#FileName:             test2812.sh
#********************************************************************
curl http://192.168.139.128   curl命令访问页面
if [ $? -eq 0 ];then
        echo "web service is regular running"
else
        exit 12              编写返回指定退出码
        echo $?
fi

步骤二:使用bash运行验证脚本 

#不能成功访问
[root@manager ~]# bash test2812.sh
curl: (7) Failed to connect to 192.168.139.128 port 80: Connection refused

#可以成功访问
[root@manager ~]# bash test2812.sh
this s first 
web service is regular running

 1.2 双分支结构

if < 条件表达式 >
then
     指令序列 1
else
     指令序列 2
fi

示例3:判web服务是否运行(1、查看进程的方式判断该程序是否运行,2、通过查看端口的方式判断该程序是否运行),如果没有运行,则启动该服务并配置防火墙规则。

步骤一: 使用vim编辑test282.sh脚本

[root@manager ~]# vim test282.sh

#!/bin/bash
#
#********************************************************************
#Author:                Shi
#Date:                  2022-12-28
#FileName:             test282.sh
#********************************************************************
#检查服务状态,是否安装
read -p "请输入要检测的服务:" SERVICE
netstat -anp | grep $SERVICE &> /dev/null
if [ $? -eq 0 ]
then
        echo "$SERVICE服务已经启动!"
        systemctl start firewalld &> /dev/null
        firewalld-cmd --permanent --add-service=httpd &> /dev/null
        firewalld-cmd --permanent --reload &> /dev/null
else
        rpm -q $SERVICE &> /dev/null
 
        if [ $? -eq 0 ]
        then
                echo "$SERVICE服务已安装,正在启动...."
        service  $SERVICE  start
        else
                echo "该服务未安装!"
        fi
fi

 步骤二:设置脚本为可执行文件

[root@manager ~]# chmod a+rx test282.sh

步骤三:运行验证脚本

[root@manager ~]# sh test282.sh
请输入要检测的服务:dhcpd
该服务未安装!
[root@manager ~]# sh test282.sh
请输入要检测的服务:httpd
httpd服务已安装,正在启动....
Redirecting to /bin/systemctl start httpd.service
[root@manager ~]# sh test282.sh
请输入要检测的服务:httpd
httpd服务已经启动!

1.3 多分支结构

语法:

if 条件表达式1
then
   命令序列1
elif 条件表达式2
then
   命令序列2
elif 条件表达式3
then
   命令序列3
else
   命令序列n
fi

在上面的语法中,当整个 if elif 语句结构中的第 1 个条件表达式为真,则执行第 1 then 子句中的语句statement1;否则,继续下面的判断。如果条件表达式 2 的值为真,则执行第 2 then 子句中的语句,以此类推。如果所有的条件表达式的值都为假,则执行最后的else 子句中的语句。最后是 if elif 结构的结束标志fi

 示例4:两个整数比较大小。

 方法1

#使用vim编辑compare.sh脚本
[root@localhost test3]# vim compare.sh

#!/bin/bash
if [ "$1" -eq "$2" ];then
   echo "$1 equal $2"
elif [ "$1" -gt "$2" ]
then
   echo "$1 greater than $2"
else
   echo "$1 less than $2"
fi

#将文件设置为可执行文件
[root@localhost test3]# chmod a+rx ping.sh

#运行验证脚本
[root@localhost test3]# ./compare.sh 20 20
20 equal 20

方法二:

#使用vim编辑compare1.sh脚本
[root@localhost test3]# vim compare1.sh

#!/bin/bash
read -p "please input integer:" a b
if [ "$a" -eq "$b" ];then
   echo "$a equal $b"
elif [ "$a" -gt "$b" ]
then
   echo "$a greater than $b"
else
   echo "$a less than $b"
fi

#设置文件为可执行文件
[root@localhost test3]# chmod a+rx compare1.sh

#运行验证脚本
[root@localhost test3]# ./compare1.sh
please input integer:12 30
12 less than 30

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值