复习:if语句中,需要用到判断语句 test 或者 [ ]
最简单的实质类似的内容: [ -z /sh/student1.txt ] && echo yes || echo no
1、单分支if条件语句
if [ 条件判断式 ] ; then
程序
fi
或者用:
if [ 条件判断式 ]
then
程序
fi
注意:
1)shell中 方法的开始结束为开头的倒写,比如 if fi
2)if 语句使用fi 结尾,和一般语言使用大括号结尾不同
3)[ 条件判断式 ]就是使用test命令判断,所以中括号和条件判断式之间必须有空格
4)then 后面跟符合条件之后执行的程序,可以放在[ ]之后,用“ ;”(英文分号)分隔。也可以换行写入,即在第一行末尾加 " \ "了
示例1、判断分区使用率
[root@localhost sh]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
18G 7.8G 8.5G 48% /
tmpfs 931M 76K 931M 1% /dev/shm
/dev/sda1 477M 41M 411M 9% /boot
/dev/sdb1 2.0G 3.1M 1.9G 1% /disk1
/dev/sdb5 2.0G 3.1M 1.9G 1% /disk5
/dev/sr0 1.1G 1.1G 0 100% /media/Ubuntu 14.04.5 LTS amd64
[root@localhost sh]# vim fenquused.sh
#!/bin/bash
#统计根分区使用率
#Author:Xiaoxiao Zhou
rate=$( df -h | grep "/dev/sdb5" | awk '{print $5}' | cut -d "%" -f1)
#把根分区使用率作为变量值赋予变量rate
if [ $rate -ge 80 ]
then
echo "Warning ! /dev/sdb3 is full!!"
fi
~
[root@localhost sh]# chmod 755 fenquused.sh
[root@localhost sh]# ./fenquused.sh
[root@localhost sh]#
注意:如上,没有任何提示,因为使用率都没有达到80%,所以不会警告
2、双分支if条件语句
if [ 条件判断式 ]
then
条件成立时,执行的程序
else
条件不成立时,执行的另一个程序
fi
示例2、备份mysql数据库
[root@localhost sh]# vim beifenmysql.sh
#!/bin/bash
#备份mysql数据库
ntpdate asia.pool.ntp.org &> /dev/null
#同步系统时间
date=$(date +%y%m%d)
#把当前系统时间按照“年月日”格式赋予变量date
size=$(du -sh /var/lib/mysql)
#统计mysql数据库的大小,并把大小赋予size变量
~
[root@localhost sh]# chmod 755 beifenmysql.sh
[root@localhost sh]# ./beifenmysql.sh
date: 额外的操作数 "%y%m%d" #此处根据提示了解到+%y%m%d 加号和后面要连写,中间不能有空格,如上是我更改之后的内容
请尝试执行"date --help"来获取更多信息。
du: 无法访问"/var/lib/mysql": 没有那个文件或目录
[root@localhost sh]# vim beifenmysql.sh
[root@localhost sh]# ./beifenmysql.sh
du: 无法访问"/var/lib/mysql": 没有那个文件或目录 因为我确实无法连接到该数据库
如上示例,你可以更改要备份的内容进行测试
示例3、
[root@localhost sh]# vim ceshiifelse.sh
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 -zef mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt
&> /dev/null
rm -rf /tmp/dbbak/dbinfo.txt
fi
"ceshiifelse.sh" 36L, 644C
[root@localhost sh]#
[root@localhost sh]# chmod 755 ceshiifelse.sh
[root@localhost sh]# ./ceshiifelse.sh
tar: 无效选项 -- "e"
请用“tar --help”或“tar --usage”获得更多信息。
[root@localhost sh]# vim ceshiifelse.sh
[root@localhost sh]# ./ceshiifelse.sh
tar: 从成员名中删除开头的“/”
tar: /var/lib/mysql:无法 stat: 没有那个文件或目录
tar: 由于前次错误,将以上次的错误状态退出
[root@localhost sh]#
[root@localhost sh]# vim judgeapachestart.sh
[root@localhost sh]# vim judgeapachestart.sh
#!/bin/bash
#判断Apache是否启动
port=$(nmap -sT 192.168.1.132 | 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
~
[root@localhost sh]#
[root@localhost sh]# chmod 755 judgeapachestart.sh
[root@localhost sh]# ./j
jiafajisuanqi.sh judgeapachestart.sh
[root@localhost sh]# ./judgeapachestart.sh
./judgeapachestart.sh: line 5: nmap: command not found
[root@localhost sh]# apt get install nmap
-bash: apt: command not found
[root@localhost sh]# apt-get inst