Linux基础学习之Shell编程——流程控制语句——if语句

本文详细介绍了Linux Shell编程中的if条件语句,包括单分支和双分支if语句的使用方法,强调了判断条件、then与fi的使用规范,并通过实例演示了如何判断分区使用率和备份MySQL数据库等操作。此外,提到了多分支case条件语句,作为与if语句不同的多条件判断方式。
摘要由CSDN通过智能技术生成

复习:if语句中,需要用到判断语句 test 或者 [  ]

最简单的实质类似的内容: [ -z /sh/student1.txt  ]  && echo yes || echo no

1、单分支if条件语句

if [   条件判断式   ] ; then

     程序

fi 

或者用:

if [   条件判断式  ] 

        then

                程序

fi

注意:

1)shell中 方法的开始结束为开头的倒写,比如  if   fi

2)if 语句使用fi 结尾,和一般语言使用大括号结尾不同

3)[  条件判断式  ]就是使用test命令判断,所以中括号和条件判断式之间必须有空格

4)then 后面跟符合条件之后执行的程序,可以放在[  ]之后,用“ ;”(英文分号)分隔。也可以换行写入,即在第一行末尾加 " \ "了

示例1、判断分区使用率

[root@localhost sh]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       18G  7.8G  8.5G  48% /
tmpfs                 931M   76K  931M   1% /dev/shm
/dev/sda1             477M   41M  411M   9% /boot
/dev/sdb1             2.0G  3.1M  1.9G   1% /disk1
/dev/sdb5             2.0G  3.1M  1.9G   1% /disk5
/dev/sr0              1.1G  1.1G     0 100% /media/Ubuntu 14.04.5 LTS amd64
[root@localhost sh]# vim fenquused.sh 

#!/bin/bash
#统计根分区使用率

#Author:Xiaoxiao Zhou 

rate=$( df -h | grep "/dev/sdb5" | awk '{print $5}' | cut -d "%" -f1)

#把根分区使用率作为变量值赋予变量rate

if [ $rate -ge 80 ]

     then

      echo "Warning ! /dev/sdb3 is full!!"

fi

~                                    
[root@localhost sh]# chmod 755 fenquused.sh 
[root@localhost sh]# ./fenquused.sh 
[root@localhost sh]#

注意:如上,没有任何提示,因为使用率都没有达到80%,所以不会警告

2、双分支if条件语句

if [  条件判断式   ]  

     then

           条件成立时,执行的程序

      else

            条件不成立时,执行的另一个程序

fi

示例2、备份mysql数据库

[root@localhost sh]# vim beifenmysql.sh

#!/bin/bash
#备份mysql数据库

ntpdate asia.pool.ntp.org &> /dev/null
#同步系统时间

date=$(date +%y%m%d)

#把当前系统时间按照“年月日”格式赋予变量date

size=$(du -sh /var/lib/mysql)

#统计mysql数据库的大小,并把大小赋予size变量

~                         
[root@localhost sh]# chmod 755 beifenmysql.sh 
[root@localhost sh]# ./beifenmysql.sh 
date: 额外的操作数 "%y%m%d"   #此处根据提示了解到+%y%m%d  加号和后面要连写,中间不能有空格,如上是我更改之后的内容
请尝试执行"date --help"来获取更多信息。
du: 无法访问"/var/lib/mysql": 没有那个文件或目录
[root@localhost sh]# vim beifenmysql.sh
[root@localhost sh]# ./beifenmysql.sh 
du: 无法访问"/var/lib/mysql": 没有那个文件或目录  因为我确实无法连接到该数据库

如上示例,你可以更改要备份的内容进行测试

示例3、

[root@localhost sh]# vim ceshiifelse.sh 

if [ -d /tmp/dbbak ]

   then

      echo "Date : $date!" >/tmp/dbbak/dbinfo.txt

      echo "Data size : $size " >> /tmp/dbbak/dbinfo.txt

      cd /tmp/dbbak

      tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt

   &> /dev/null

      rm -rf /tmp/dbbak/dbinfo.txt

   else

       mkdir /tmp/dbbak

       echo "Date : $date!" > /tmp/dbbak/dbinfo.txt

       echo "Data size :$size " >> /tmp/dbbak/dbinfo.txt

       cd /tmp/dbbak

       tar  -zef mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt

   &> /dev/null

       rm -rf /tmp/dbbak/dbinfo.txt
fi
"ceshiifelse.sh" 36L, 644C         

[root@localhost sh]# 
[root@localhost sh]# chmod 755 ceshiifelse.sh 
[root@localhost sh]# ./ceshiifelse.sh 
tar: 无效选项 -- "e"
请用“tar --help”或“tar --usage”获得更多信息。
[root@localhost sh]# vim ceshiifelse.sh 
[root@localhost sh]# ./ceshiifelse.sh 
tar: 从成员名中删除开头的“/”
tar: /var/lib/mysql:无法 stat: 没有那个文件或目录
tar: 由于前次错误,将以上次的错误状态退出
[root@localhost sh]# 
[root@localhost sh]# vim judgeapachestart.sh
[root@localhost sh]# vim judgeapachestart.sh 

#!/bin/bash

#判断Apache是否启动

port=$(nmap -sT 192.168.1.132 | grep tcp | grep http | awk '{print $2}')

#使用nmap命令扫描服务器,并截取Apache服务的状态,赋予变量port

if [ "$port" == "open" ]

   then

        echo "$(date) httpd is ok! " >> /tmp/autostart-acc.log

   else

       /etc/rc.d/init.d/httpd start &> /dev/null

       echo "$(date) restart httpd !! " >> /tmp/autostart-err.log
fi
~                                                 
[root@localhost sh]# 
[root@localhost sh]# chmod 755 judgeapachestart.sh 
[root@localhost sh]# ./j
jiafajisuanqi.sh     judgeapachestart.sh  
[root@localhost sh]# ./judgeapachestart.sh 
./judgeapachestart.sh: line 5: nmap: command not found
[root@localhost sh]# apt get install nmap
-bash: apt: command not found
[root@localhost sh]# apt-get inst
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值