(33)if、case语句

时间:2022-07-24
本文章向大家介绍(33)if、case语句,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1.单分支if条件语句

格式:
if [ 条件判断式 ];then
  程序
fi
或者
if [ 条件判断式 ]
  then
      程序
fi

单分支条件语句需要注意几个点

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

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

③then后面跟符合条件之后执行的程序,可以放在[]之后,用“;”分割。也可以换行写入,就不需要“;”了

例1.判断分区使用率

#!/bin/bash
#统计根分区使用率 
#Author:yuzai
rate=$(df -h | grep "/dev/mapper/centos-root" |awk '{print $5}' |cut -d "%" -f1)
#把根分区使用率作为变量值赋予变量rate 
if [ $rate -ge 80 ]
then
echo "Warning! /dev/sdas is full!!"
fi

2.双分支if条件语句

格式:
if [ 条件判断式 ]
 then
    条件成立时,执行的程序
  else
    条件不成立时,执行的另一个程序
 fi

例1.备份mysql数据库

#!/bin/bash
#备份mysql数据库
#Author:yuzai
ntpdate asia.pool.ntp.org &> /dev/null
#同步系统时间
date=$(date +%y%m%d)
#把当前系统时间按照“年月日”格式赋予变量date
size=$(du -sh /var/lib/mysql)
#统计mysql数据库的大小,并把大小赋予size变量
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 -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &>/dev/null 
        rm -rf /tmp/dbbak/dbinfo.txt
fi

例2.判断apache是否启动

#!/bin/bash 
#Author:yuzai
port=$(nmap -sT 47.95.5.171 | 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 

3.多分支if条件语句

格式:
if [ 条件判断式1 ] 
         then 
          当条件判断式1成立时,执行程序1 
elif [ 条件判断式2 ] 
        then
          当条件判断式2成立时,执行程序2
...省略更多条件... 
else 
          当所有条件都不成立时,最后执行此程序
 fi 

例1.判断用户输入的是什么文件

#!/bin/bash
#Author: yangyang (E-mail:1771566679@qq.com) 
read -p "Please input a filename: " file 
#接收键盘的输入,并赋予变量file if [ -z "$file" ] 
#判断file变量是否为空 
  then 
    echo "Error,please input a filename" 
    exit 1 #定义错误返回值1
elif [ ! -e "$file" ] #判断file的值是否存在 
  then
    echo "Your input is not a file!" 
    exit 2   #定义错误返回值2
elif [ -f "$file" ] #判断file的值是否为普通文件 
   then
        echo "$file is a regulare file!"
elif [ -d "$file" ] #判断file的值是否为目录文件 
   then
        echo "$file is a directory!"
else
        echo "$file is an other file!"
fi

4.case语句

case语句和if…elif…else语句一样都是多分支条件语句,不过和if多分支条件语句不同的是,case语句只能判断一种条件关系,而if语句可以判断多种条件关系。

格式:
case $变量名 in 
  "值1")
    如果变量的值等于值1,则执行程序1 
  ;; 
  "值2") 
    如果变量的值等于值2,则执行程序2 
  ;; 
...省略其他分支... *) 
       如果变量的值都不是以上的值,则执行此程序
;; 
esac 

例1.判断用户输入

#!/bin/bash 
#Author: yuzai
read -p "Please choose yes/no: " -t 30 cho
case $cho in 
        "yes")
                echo "Your choose is yes!"
    ;; 
       "no") 
                echo "Your choose is no!"
    ;; 
      *) 
        echo "Your choose is error!"
    ;;    
esac 

例2.打印车票

#!/bin/bash 
#Author: yuzai
echo 'If you want to shanghai,please choose "1"'
echo 'If you want to nanjing,please choose "2"'
echo 'If you want to xuzhou,please choose "3"'
read -t 30 -p "please input your choice:" cho
case "$cho" in
"1")
echo "Shanghai ticket issued successfully!"
;;
"2")
echo "Nanjing ticket issued successfully!"
;;
"3")
echo "Xuzhou ticket issued successfully!"     
;;
"*")
echo "Error, please enter 1/2/3"
;;
esac

END