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:651926413@qq.com) 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:651926413@qq.com) 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:651926413@qq.com)

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:651926413@qq.com)

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:651926413@qq.com) 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循环