您的位置:首页 > 运维架构 > Shell

shell编程-流程控制-if语句

2017-06-07 15:20 417 查看

1. 单分支if条件语句

单分支if条件语句有三种写法:

if [ 条件判断式 ]; then
操作
fi


或者

if [ 条件判断式 ]
then
操作
fi


或者

if [ 条件判断式 ];then 操作;fi


说明:只有条件成立,才执行相应的操作。

示例:

if [ aa==aa ];then echo yes;fi


注意要点:

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" > /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

#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" == "open" ]
then
echo "$(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后面跟数字,可以指定脚本执行后 $? 的值。后面的代码不会执行。
elif [ ! -e $filename ]
then
echo "There is no such file"
exit 2
elif [ -f $filename ]
then
echo "$filename is a regular file"
elif [ -d $filename ]
then
echo "$filename is a directory"
else
echo "$filename is a special file"
fi
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: