shell脚本的if判断语句

if语句

1、按照文件类型进行判断
-d 文件)判断该文件是否存在,并且是否为字符设备文件(是字符设备为真)
-e 文件)判断该文件是否存在(存在为真)
[-e /root]
echo $?输出为0 #判断为真,即为0
常用的格式有:
[ -e /root ] && echo yes || echo no

一、单分支if条件语句格式有如下两种:

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

但分支条件语句需要注意几个点
·if语句使用fi结尾,和一般语言使用大括号结尾不同
·[ 条件判断式 ]就是使用test命令判断,所以中括号和条件判断式之间必须有空格
·then后面和符合条件之后执行的程序,可以放在[]之后,用“;”分割。也可以换行写入,就不需要是“;”了

例子:判断分区使用率
#!/bin/bash
#统计根分区使用率
#Author:xuyizhong (E-mail:[email protected])
rate=$(df -h |grep "/dev/vda1" | awk '{print $5}' | cut -d "%" -f1)
#把根分区使用率作为变量值赋予变量rate
if [ $rate -ge 80 ]
then
echo "Warning! /dev/vda1 is full !!!"
fi

二、双分支if条件语句

if [ 条件判断式 ]
then
条件成立时,执行的程序
else
条件不成立时,执行的另一个程序
fi
例子1:备份mysql数据库
#!/bin/bash
#备份mysql数据库
#Author:xuyizhong (E-mail:[email protected])
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 ]
#判断/tmp/dbbak文件夹是否存在,存在执行then,不存在执行else
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:xuyizhong (E-mail:[email protected])

port=$(nmap -sT 192.168.1.156 | 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

#自己将apache停止,查看apache会不会自动重新启动!

三、多分支if条件分支

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

例子1:判断用户输入指令的是什么
#!/bin/bash
#Author:xuyizhong (E-mail:[email protected])

read -p "Please input a filename:" file
#接收键盘的输入,并赋予变量file

if [ -z "$file" ]
#判断file变量是否为空
then
echo "Error,please input a filename"
exit 1
elif [ ! -e "$file" ]
#判断file的值是否存在
then
echo "Your input is not a file!"
exit 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

case语句

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

case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;

如果变量的值都是以上的值,则执行此程序
;;
esac
例子1:
#!/bin/bash
#判断用户输入
#Author:xuyizhong (E-mail:[email protected])
read -p "Please choose yes/no " -t 30 cho
#将用户的值赋予给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
echo ' you want to shanghai,please input "1" '
echo ' you want to guangzhou,please input "2" '
echo ' you want to chengdu,please input "3" '
read -t 30 -p "Please input your choose " -t 30 cho

case "$cho" in
"1")
echo "shanghai 的机票已经发售"
;;
"2")
echo "guangzhou 的机票已经发售"
;;
"1")
echo "chengdu 的机票已经发售"
;;
*)
echo "error 1/2/3"
;;
esac

for循环

while循环

猜你喜欢

转载自blog.51cto.com/12131824/2132611