1.单分支if条件语句
代码语言:javascript复制格式:
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
fi
单分支条件语句需要注意几个点
①if语句使用fi结尾,和一般语言使用大括号结尾不同
②[ 条件判断式 ]就是使用test命令判断,所以中括号和条件判断式之间必须有空格
③then后面跟符合条件之后执行的程序,可以放在[]之后,用“;”分割。也可以换行写入,就不需要“;”了
例1.判断分区使用率
代码语言:javascript复制#!/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条件语句
代码语言:javascript复制格式:
if [ 条件判断式 ]
then
条件成立时,执行的程序
else
条件不成立时,执行的另一个程序
fi
例1.备份mysql数据库
代码语言:javascript复制#!/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是否启动
代码语言:javascript复制#!/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条件语句
代码语言:javascript复制格式:
if [ 条件判断式1 ]
then
当条件判断式1成立时,执行程序1
elif [ 条件判断式2 ]
then
当条件判断式2成立时,执行程序2
...省略更多条件...
else
当所有条件都不成立时,最后执行此程序
fi
例1.判断用户输入的是什么文件
代码语言:javascript复制#!/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语句可以判断多种条件关系。
代码语言:javascript复制格式:
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
...省略其他分支... *)
如果变量的值都不是以上的值,则执行此程序
;;
esac
例1.判断用户输入
代码语言:javascript复制#!/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.打印车票
代码语言:javascript复制#!/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