一、双分支if条件语句
### --- 双分支if条件语句语法
if [ 条件判断式 ]
then
条件成立时,执行的程序
else
条件不成立时,执行的另一个程序
fi
二、实例一:双分支if条件语句实验
### --- 实例一:双分支if条件语句实验
### --- 备份mysql数据库
[root@localhost ~]# vi sh/bakmysql.sh
#!/bin/bash
#备份 mysql 数据库。
# Author: shenchao (E-mail: shenchao@atguigu.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 ]
#判断备份目录是否存在,是否为目录
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 dbinfo.txt /var/lib/mysql &>/dev/null
#压缩备份数据库与临时文件
rm -rf /tmp/dbbak/dbinfo.txt
#删除临时文件
fi
三、实例二:再举个例子,我们拿 apache 服务来举例:
### --- 再举个例子
~~~ 在工作当中,服务器上的服务经常会宕机。如果我们对服务器监控不好,
~~~ 就会造成服务器中服务宕机了,而管理员却不知道的情况,
~~~ 这时我们可以写一个脚本来监听本机的服务,如果服务停止或宕机了,可以自动重启这些服务。
~~~ 我们拿 apache 服务来举例:
### --- 判断 apache 是否启动,如果没有启动则自动启动
[root@localhost ~]# vi sh/autostart.sh
#!/bin/bash
#判断 apache 是否启动,如果没有启动则自动启动
# Author: shenchao (E-mail: shenchao@atguigu.com)
port=$(nmap -sT 192.168.4.210 | grep tcp | grep http | awk '{print $2}')
#使用 nmap 命令扫描服务器,并截取 apache 服务的状态,赋予变量 port
if [ "$port" == "open" ]
#如果变量 port 的值是“open”
then
echo “$(date) httpd is ok!” >> /tmp/autostart-acc.log
#则证明 apache 正常启动,在正常日志中写入一句话即可
else
/etc/rc.d/init.d/httpd start &>/dev/null
#否则证明 apache 没有启动,自动启动 apache
echo "$(date) restart httpd !!" >> /tmp/autostart-err.log
#并在错误日志中记录自动启动 apche 的时间
fi
四、以我们使用 nmap 端口扫描命令,nmap 命令格式如下:
### --- 以我们使用 nmap 端口扫描命令,nmap 命令格式如下:
~~~ # 选项:
~~~ -s
~~~ -T
~~~ # 扫描
~~~ 扫描所有开启的 TCP 端口
[root@localhost ~]# nmap -sT 域名或 IP
五、这条命令的执行结果如下:
### --- 这条命令的执行结果如下:
~~~ 可以看到这台服务器开启了如下的服务
[root@localhost ~]# nmap -sT 192.168.4.210
Starting Nmap 5.51 ( http://nmap.org ) at 2018-11-25 15:11 CST
Nmap scan report for 192.168.4.210
Host is up (0.0010s latency).
Not shown: 994 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http <——apache 的状态是 open
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
3306/tcp open mysql
Nmap done: 1 IP address (1 host up) scanned in 0.49 seconds
六、知道了 nmap 命令的用法,来看看脚本中命令的结果:
### --- 知道了 nmap 命令的用法,我们在脚本中使用的命令就是为了截取 http 的状态,
~~~ 只要状态是“open”就证明 apache 启动正常,否则证明 apache 启动错误。
~~~ 来看看脚本中命令的结果:
[root@localhost ~]# nmap -sT 192.168.4.210 | grep tcp | grep http | awk '{print $2}'
#扫描指定计算机,提取包含 tcp 的行,在提取包含 httpd 的行,截取第二列
open
#把截取的值赋予变量 port