码迷,mamicode.com
首页 > 系统相关 > 详细

shell学习之路:流程控制(if)

时间:2015-06-29 21:50:11      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

1.单分支if条件语句

1 if [ 条件判断式 ];then
2     程序
3 fi
4 或者
5 if [ 条件判断式 ]
6     then
7         程序
8 fi

注意事项:

1.if语句使用fi结尾,和一般语言使用大括号结尾不同

2.[ 条件判断式 ]就是使用test命令判断,所以中括号和条件判断式之间必须有空格 前后都要有

3.then后面跟符合条件之后执行的程序,可以放在[]之后,用";"分号分割。也可以换行写入,就不需要";"了

例如:判断分区使用率

脚本说明: 我的根分区是/dev/sdb5 我将 df -h 中的第五列的百分数字部分提取出来

赋给$rate 在用if判断比较结果是否大于80 大于则成立 不大于则不成立 成立则输出警告 不成立则不执行任何

当然我也可以将警告替换成其他 例如email信息或者触发另一个警告脚本以及将警告信息生成日志等等!

#!/bin/bash
#统计根分区使用率
#Author: pat (Email:239@qq.com)

rate=$(df -h | grep "/dev/sda5" | awk {printf $5"\n"} | cut -d "%" -f 1)
#把根分区使用率作为变量值赋予变量rate

if [ $rate -ge 80 ]
    then
        echo "WARNING! /dev/sda5 is full!!"
fi

2.双分支if条件语句

1 if [ 条件判断式 ]
2     then
3         条件成立时,执行的程序
4     else
5         条件不成立时,执行的程序
6 fi

例如1:备份mysql数据库

 

 1 #!/bin/bash
 2 #备份mysql数据库
 3 ntpdate asia.pool.ntp.org $>/dev/null
 4 #同步系统时间
 5 date=$(date +%y%m%d)
 6 #把当前系统时间的年月日格式赋予变量date
 7 size=$(du -sh /var/lib/mysql)
 8 #统计mysql数据库文件的大小,并把大小赋给变量size
 9 if [ -d /tmp/dbbak ]
10     then
11         echo "Date : $date!" > /tmp/dbbak/dbinfo.txt
12         echo "Data size : $size" >> /tmp/dbbak/dbinfo.txt
13         cd /tmp/dbbak
14         tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &>/dev/null
15         rm -rf /tmp/dbbak/dbinfo.txt
16     else
17         mkdir /tmp/dbbak
18         echo "Date : $date!" > /tmp/dbbak/dbinfo.txt
19         echo "Data size : $size" >> /tmp/dbbak/dbinfo.txt
20         cd /tmp/dbbak
21         tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &>/dev/null
22         rm -rf /tmp/dbbak/dbinfo.txt
23 fi

 

示例二:判断apache是否启动:

需要安装nmap命令 CentOS下执行:yum -y installl nmap

 

技术分享
 1 #!/bin/bash
 2 
 3 port=$(nmap -sT localhost | grep tcp | grep http | awk {print $2})
 4 echo "$port"
 5 ##使用nmap命令扫描服务器,并截取apache服务的状态,赋给变量port
 6 if [ "$port" == "open" ]
 7         then
 8                 echo "$(date) httpd is ok!" >> /tmp/autostart-acc.log
 9         else
10                 if [ -f "/etc/init.d/httpd" ] ; then
11                         /etc/init.d/httpd start &>/dev/null
12                         echo "$(date) restart httpd !!" >> /tmp/autostart-err.log
13                 else
14                         echo "error is not httpd server your is chack apache?"
15                 fi
16 fi
http.sh

 

3.多分支if条件语句

1 if [ 条件判断1 ] ; then
2     当前条件判断式1成立时,执行的程序
3 elif [ 条件判断2 ] ; then
4     当前条件判断2成立时,执行的程序
5 .......可写多个
6 else
7     当所有条件均不成立时,执行的程序
8 fi

例如:1

#!/bin/bash
read -p "Please input -a filename:" file
# 接收键盘的输入,并赋给变量file
if [ -z "$file" ]
# 判断变量file是否为空
        then
                echo "Error please input a filename"
                exit 1
elif [ ! -e "$file" ] ; then
# 判断file的值是否存在
        echo "Your input is not a file!"
        exit 2
elif [ -f "$file" ] ; then
        echo "is file"
elif [ -d "$file" ] ; then
        echo "is directory"
else
        echo "$file is an other file!"
fi

 

shell学习之路:流程控制(if)

标签:

原文地址:http://www.cnblogs.com/patf/p/4608484.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!