1. 单分支if条件语句
单分支if条件语句有三种写法:
if [ 条件判断式 ]; then
操作
fi
或者
if [ 条件判断式 ]
then
操作
fi
或者
if [ 条件判断式 ];then 操作;fi
说明:只有条件成立,才执行相应的操作。
示例:
if [ aa==aa ];then echo yes;fi
- 1
注意要点:
- if语句使用fi结尾。
- [ 条件 ] 中括号的内部两侧必须有空格。
- 如果then和上面的if判断在同一行,要用分号;分割。
示例:判断根分区的使用率
写一个shell脚本usage.sh:
#!/bin/bash
# 判断根分区的使用率
# Author: root
rate=$(df -h | grep "/dev/sda3" | awk '{print $5}' | cut -d "%" -f1)
# 把分区/dev/sda3的使用率作为值赋予变量rate
if [ $rate -ge 80 ];then
echo "Warning! /dev/sda3 is full"
fi
2. 双分支if条件语句
基本格式:
if [ 条件 ]
then
条件成立时,执行操作1
else
条件不成立时,执行操作2
fi
示例:备份mysql数据库
#!/bin/bash
#备份mysql数据库
#Author: root
ntpdate asia.pool.ntp.org &>/dev/null
#同步系统时间,并将执行结果直接丢弃(即不输出到屏幕)
#Linux默认没有ntpdate命令,可用 yum -y install ntpdate 安装
date=$(date +%Y%m%d)
#把当前系统时间按照“年月日”格式赋予变量date
size=$(du -sh /var/lib/mysql)
#统计mysql数据库的大小,并把其赋予size变量
if [ -d /tmp/dbbak ]
then
echo "Date: \(date</span>"</span> > /tmp/dbbak/dbinfo.txt
<span class="hljs-built_in">echo</span> <span class="hljs-string">"Data size: <span class="hljs-variable">\)size" >> /tmp/dbbak/dbinfo.txt
cd /tmp/dbbak
tar -zcf mysql-lib-\(date</span>.tar.gz /var/lib/mysql dbinfo.txt &>/dev/null
rm -rf /tmp/dbbak/dbinfo.txt
<span class="hljs-keyword">else</span>
mkdir /tmp/dbbak
<span class="hljs-built_in">echo</span> <span class="hljs-string">"Date: <span class="hljs-variable">\)date" > /tmp/dbbak/dbinfo.txt
echo "Data size: \(size</span>"</span> >> /tmp/dbbak/dbinfo.txt
<span class="hljs-built_in">cd</span> /tmp/dbbak
tar -zcf mysql-lib-<span class="hljs-variable">\)date.tar.gz /var/lib/mysql dbinfo.txt &>/dev/null
rm -rf /tmp/dbbak/dbinfo.txt
fi
示例2:判断apache的运行状态
#!/bin/bash
#linux默认没有安装apache,可用 yum -y install httpd 快速安装
#但如果是作为真实的服务器,建议用源码包安装apache
state=$(nmap -sT 192.168.200.128 | grep tcp | grep http | awk '{print $2}')
#使用nmap命令扫描服务器,并截取Apache服务器的状态,赋予变量state
#Linux默认没有nmap命令,可用 yum -y install nmap 快速安装
#说明:nmap命令比ps或netstat要好,它判断的更准确
#比如apache虽然是启动状态但无法正常响应客户请求时,用nmap能检测出真实的运行状态
if [ "\(state</span>"</span> == <span class="hljs-string">"open"</span> ]
<span class="hljs-keyword">then</span>
<span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">\)(date) httpd is OK" >> /tmp/autostart-acc.log
else
/etc/rc.d/init.d/httpd restart &>/dev/null
echo "$(date) restart httpd" >> /tmp/autostart-err.log
fi
可使用Linux的定时任务让该脚本文件每15分钟执行一次,从而保证apache的正常运行。
3. 多分支if条件语句
基本格式:
if [ 条件1 ]
then
当条件1成立时,执行操作1
elif [ 条件2 ]
then
当条件2成立时,执行操作2
...
else
当所有条件都不成立时,执行最终操作
fi
示例:判断用户的输入
#!/bin/bash
#判断用户的输入
#Author:root
read -p "Please input a filename: " filename
#接收键盘的输入,并赋给变量filename
if [ -z $filename ]
then
echo "Error, please input a filename"
exit 1
#exit后面跟数字,可以指定脚本执行后 \(? 的值。后面的代码不会执行。</span>
<span class="hljs-keyword">elif</span> [ ! <span class="hljs-operator">-e</span> <span class="hljs-variable">\)filename ]
then
echo "There is no such file"
exit 2
elif [ -f \(filename</span> ]
<span class="hljs-keyword">then</span>
<span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">\)filename is a regular file"
elif [ -d \(filename</span> ]
<span class="hljs-keyword">then</span>
<span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">\)filename is a directory"
else
echo "$filename is a special file"
fi
<ul class="pre-numbering" style=""