第十一讲Shell编程主讲人:沈超()交流论坛:、单分支if条件语句if[条件判断式];then程序fi或者if[条件判断式]then程序fi单分支条件语句需要注意几个点if语句使用fi结尾,和一般语言使用大括号结尾不同[条件判断式]就是使用test命令判断,所以中括号和条件判断式之间必须有空格then后面跟符合条件之后执行的程序,可以放在[]之后,用“;”分割。也可以换行写入,就不需要“;”了例子:判断分区使用率#!/bin/bash#统计根分区使用率#Author:shenchao(E-mail:shenchao@lampbrother.net)rate=$(df-h|grep/dev/sda3|awk'{print$5}'|cut-d%-f1)#把根分区使用率作为变量值赋予变量rateif[$rate-ge80]thenechoWarning!/dev/sda3isfull!!fi2、双分支if条件语句if[条件判断式]then条件成立时,执行的程序else条件不成立时,执行的另一个程序fi例子1:备份mysql数据库#!/bin/bash#备份mysql数据库。#Author:shenchao(E-mail:shenchao@lampbrother.net)ntpdateasia.pool.ntp.org&/dev/null#同步系统时间date=$(date+%y%m%d)#把当前系统时间按照“年月日”格式赋予变量datesize=$(du-sh/var/lib/mysql)#统计mysql数据库的大小,并把大小赋予size变量if[-d/tmp/dbbak]thenechoDate:$date!/tmp/dbbak/dbinfo.txtechoDatasize:$size/tmp/dbbak/dbinfo.txtcd/tmp/dbbaktar-zcfmysql-lib-$date.tar.gz/var/lib/mysqldbinfo.txt&/dev/nullrm-rf/tmp/dbbak/dbinfo.txtelsemkdir/tmp/dbbakechoDate:$date!/tmp/dbbak/dbinfo.txtechoDatasize:$size/tmp/dbbak/dbinfo.txtcd/tmp/dbbaktar-zcfmysql-lib-$date.tar.gz/var/lib/mysqldbinfo.txt&/dev/nullrm-rf/tmp/dbbak/dbinfo.txtfi例子2:判断apache是否启动#!/bin/bash#Author:shenchao(E-mail:shenchao@lampbrother.net)port=$(nmap-sT192.168.1.156|greptcp|grephttp|awk'{print$2}')#使用nmap命令扫描服务器,并截取apache服务的状态,赋予变量portif[$port==open]thenecho“$(date)httpdisok!”/tmp/autostart-acc.logelse/etc/rc.d/init.d/httpdstart&/dev/nullecho$(date)restarthttpd!!/tmp/autostart-err.logfi3、多分支if条件语句if[条件判断式1]then当条件判断式1成立时,执行程序1elif[条件判断式2]then当条件判断式2成立时,执行程序2…省略更多条件…else当所有条件都不成立时,最后执行此程序fi#!/bin/bash#判断用户输入的是什么文件#Author:shenchao(E-mail:shenchao@lampbrother.net)read-pPleaseinputafilename:file#接收键盘的输入,并赋予变量fileif[-z$file]#判断file变量是否为空thenechoError,pleaseinputafilenameexit1elif[!-e$file]#判断file的值是否存在thenechoYourinputisnotafile!exit2elif[-f$file]#判断file的值是否为普通文件thenecho$fileisaregularefile!elif[-d$file]#判断file的值是否为目录文件thenecho$fileisadirectory!elseecho$fileisanotherfile!fi