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信息或者触发另一个警告脚本以及将警告信息生成日志等等!

  1. #!/bin/bash
  2. #统计根分区使用率
  3. #Author: pat (Email:@qq.com)
  4.  
  5. rate=$(df -h | grep "/dev/sda5" | awk '{printf $5"\n"}' | cut -d "%" -f )
  6. #把根分区使用率作为变量值赋予变量rate
  7.  
  8. if [ $rate -ge ]
  9. then
  10. echo "WARNING! /dev/sda5 is full!!"
  11. 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

  1. #!/bin/bash
  2. read -p "Please input -a filename:" file
  3. # 接收键盘的输入,并赋给变量file
  4. if [ -z "$file" ]
  5. # 判断变量file是否为空
  6. then
  7. echo "Error please input a filename"
  8. exit
  9. elif [ ! -e "$file" ] ; then
  10. # 判断file的值是否存在
  11. echo "Your input is not a file!"
  12. exit
  13. elif [ -f "$file" ] ; then
  14. echo "is file"
  15. elif [ -d "$file" ] ; then
  16. echo "is directory"
  17. else
  18. echo "$file is an other file!"
  19. fi

shell学习之路:流程控制(if)的更多相关文章

  1. shell学习之路:流程控制(while)

    while循环: 介绍:while循环是不定循环,也称作条件循环.只要条件判断成立,循环就会一直继续执行,直到条件判断不成立,循环才会停止,这就是和for的固定循环不太一样了. while [ 条件判 ...

  2. shell学习之路:流程控制(for)

    for循环的语法: 1.  for 变量 in 值1 值2 值3.... do 程序 done 例如:下列脚本会分别打印4次 分别是morning noon afternoon evening的值 # ...

  3. lishell学习之路:流程控制(case)

    流程控制case语句: 介绍:多分支case条件语句 1.case语句和if..elif..else语句一样都是多分支条件语句,不过和if多分支条件语句不同的是,case语句只能判断一种条件关系,而i ...

  4. GO语言的进阶之路-流程控制

    GO语言的进阶之路-流程控制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 流程控制在编程语言中是最伟大的发明了,因为有了它,你可以通过很简单的流程描述来表达很复杂的逻辑.流程控制 ...

  5. [Shell]条件判断与流程控制:if, case, for, while, until

    ---------------------------------------------------------------------------------------------------- ...

  6. Shell入门教程:流程控制(1)命令的结束状态

    在Bash Shell中,流程控制命令有2大类:“条件”.“循环”.属于“条件”的有:if.case:属于“循环”的有:for.while.until:命令 select 既属于“条件”,也属于“循环 ...

  7. shell echo/read/printf/流程控制章节笔记

    // echo read printf 流程控制 命令 1.read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量 read hello 输入xxx echo $hell ...

  8. Python学习笔记 - day4 - 流程控制

    Python流程控制 Python中的流程控制主要包含两部分:条件判断和循环. Python的缩进和语法 为什么要在这里说缩进和语法,是因为将要学习的条件判断和分支将会涉及到多行代码,在java.c等 ...

  9. Shell(三)流程控制

    Shell 流程控制 和Java.PHP等语言不一样,sh的流程控制不可为空,如(以下为PHP流程控制写法): <?php if (isset($_GET["q"])) { ...

随机推荐

  1. 基于Token的身份验证——JWT

    初次了解JWT,很基础,高手勿喷. 基于Token的身份验证用来替代传统的cookie+session身份验证方法中的session. JWT是啥? JWT就是一个字符串,经过加密处理与校验处理的字符 ...

  2. Metro-UI系统-2-color和icon

    1.上图 Color icon 2. 怎么用 2.1 color使用 <!--1,设置背景和前景色--> <div class="tile bg-blue fg-white ...

  3. restore和recover的区别(转)

    recover和restore的区别: restore just copy the physical file, recover will consistent the database. resto ...

  4. centos+nginx从零开始配置负载均衡

    nginx负载均衡的理解 nginx是一个轻量级的.高性能的webserver,他主要可以干下面两件事: 作为http服务器(和apache的效果一样) 作为反向代理服务器实现负载均衡 现在nginx ...

  5. Java内存回收机制

    在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方面工作都是由JVM自动完成的,降低了Java程序员的学习难度,避免了像C/C++直接操作内存的危险.但是,也正 ...

  6. Error=Bias+Variance

    首先 Error = Bias + Variance Error反映的是整个模型的准确度,Bias反映的是模型在样本上的输出与真实值之间的误差,即模型本身的精准度,Variance反映的是模型每一次输 ...

  7. Hibernate Hql 总结

    1.from子句 Hibernate中最简单的查询语句的形式如下: from eg.Cat该子句简单的返回eg.Cat类的所有实例. 通常我们不需要使用类的全限定名, 因为 auto-import(自 ...

  8. 【转】七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)

    http://blog.csdn.net/xw20084898/article/details/17564957 一.工具:VC+OpenCV 二.语言:C++ 三.原理 otsu法(最大类间方差法, ...

  9. glade2支持C++代码的输出(2)

    今天更新了一个BaseObject的代码:BaseObject.002.zip 同时将glade2生成C++代码的代码进行了调整,基于2.12.2的补丁为:cpp_out_2.patch.tar.xz ...

  10. Linux 下 Oracle 内核参数优化

    数据库的性能优化涉及到整个数据库运行环境的方方面面,诸如操作系统,Oracle自身,存储,网络等等几个大块.而操作系统则是Oracle稳定运行与最大化性能的基石.本文主要描述基于Linux系统下 Or ...