shell学习之路:流程控制(if)
1.单分支if条件语句
- if [ 条件判断式 ];then
- 程序
- fi
- 或者
- if [ 条件判断式 ]
- then
- 程序
- fi
注意事项:
1.if语句使用fi结尾,和一般语言使用大括号结尾不同
2.[ 条件判断式 ]就是使用test命令判断,所以中括号和条件判断式之间必须有空格 前后都要有
3.then后面跟符合条件之后执行的程序,可以放在[]之后,用";"分号分割。也可以换行写入,就不需要";"了
例如:判断分区使用率
脚本说明: 我的根分区是/dev/sdb5 我将 df -h 中的第五列的百分数字部分提取出来
赋给$rate 在用if判断比较结果是否大于80 大于则成立 不大于则不成立 成立则输出警告 不成立则不执行任何
当然我也可以将警告替换成其他 例如email信息或者触发另一个警告脚本以及将警告信息生成日志等等!
- #!/bin/bash
- #统计根分区使用率
- #Author: pat (Email:@qq.com)
- rate=$(df -h | grep "/dev/sda5" | awk '{printf $5"\n"}' | cut -d "%" -f )
- #把根分区使用率作为变量值赋予变量rate
- if [ $rate -ge ]
- then
- echo "WARNING! /dev/sda5 is full!!"
- fi
2.双分支if条件语句
- if [ 条件判断式 ]
- then
- 条件成立时,执行的程序
- else
- 条件不成立时,执行的程序
- fi
例如1:备份mysql数据库
- #!/bin/bash
- #备份mysql数据库
- 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 /var/lib/mysql dbinfo.txt &>/dev/null
- rm -rf /tmp/dbbak/dbinfo.txt
- fi
示例二:判断apache是否启动:
需要安装nmap命令 CentOS下执行:yum -y installl nmap
- #!/bin/bash
- port=$(nmap -sT localhost | grep tcp | grep http | awk '{print $2}')
- echo "$port"
- ##使用nmap命令扫描服务器,并截取apache服务的状态,赋给变量port
- if [ "$port" == "open" ]
- then
- echo "$(date) httpd is ok!" >> /tmp/autostart-acc.log
- else
- if [ -f "/etc/init.d/httpd" ] ; then
- /etc/init.d/httpd start &>/dev/null
- echo "$(date) restart httpd !!" >> /tmp/autostart-err.log
- else
- echo "error is not httpd server your is chack apache?"
- fi
- fi
http.sh
3.多分支if条件语句
- if [ 条件判断1 ] ; then
- 当前条件判断式1成立时,执行的程序
- elif [ 条件判断2 ] ; then
- 当前条件判断2成立时,执行的程序
- .......可写多个
- else
- 当所有条件均不成立时,执行的程序
- fi
例如:1
- #!/bin/bash
- read -p "Please input -a filename:" file
- # 接收键盘的输入,并赋给变量file
- if [ -z "$file" ]
- # 判断变量file是否为空
- then
- echo "Error please input a filename"
- exit
- elif [ ! -e "$file" ] ; then
- # 判断file的值是否存在
- echo "Your input is not a file!"
- exit
- elif [ -f "$file" ] ; then
- echo "is file"
- elif [ -d "$file" ] ; then
- echo "is directory"
- else
- echo "$file is an other file!"
- fi
shell学习之路:流程控制(if)的更多相关文章
- shell学习之路:流程控制(while)
while循环: 介绍:while循环是不定循环,也称作条件循环.只要条件判断成立,循环就会一直继续执行,直到条件判断不成立,循环才会停止,这就是和for的固定循环不太一样了. while [ 条件判 ...
- shell学习之路:流程控制(for)
for循环的语法: 1. for 变量 in 值1 值2 值3.... do 程序 done 例如:下列脚本会分别打印4次 分别是morning noon afternoon evening的值 # ...
- lishell学习之路:流程控制(case)
流程控制case语句: 介绍:多分支case条件语句 1.case语句和if..elif..else语句一样都是多分支条件语句,不过和if多分支条件语句不同的是,case语句只能判断一种条件关系,而i ...
- GO语言的进阶之路-流程控制
GO语言的进阶之路-流程控制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 流程控制在编程语言中是最伟大的发明了,因为有了它,你可以通过很简单的流程描述来表达很复杂的逻辑.流程控制 ...
- [Shell]条件判断与流程控制:if, case, for, while, until
---------------------------------------------------------------------------------------------------- ...
- Shell入门教程:流程控制(1)命令的结束状态
在Bash Shell中,流程控制命令有2大类:“条件”.“循环”.属于“条件”的有:if.case:属于“循环”的有:for.while.until:命令 select 既属于“条件”,也属于“循环 ...
- shell echo/read/printf/流程控制章节笔记
// echo read printf 流程控制 命令 1.read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量 read hello 输入xxx echo $hell ...
- Python学习笔记 - day4 - 流程控制
Python流程控制 Python中的流程控制主要包含两部分:条件判断和循环. Python的缩进和语法 为什么要在这里说缩进和语法,是因为将要学习的条件判断和分支将会涉及到多行代码,在java.c等 ...
- Shell(三)流程控制
Shell 流程控制 和Java.PHP等语言不一样,sh的流程控制不可为空,如(以下为PHP流程控制写法): <?php if (isset($_GET["q"])) { ...
随机推荐
- 基于Token的身份验证——JWT
初次了解JWT,很基础,高手勿喷. 基于Token的身份验证用来替代传统的cookie+session身份验证方法中的session. JWT是啥? JWT就是一个字符串,经过加密处理与校验处理的字符 ...
- Metro-UI系统-2-color和icon
1.上图 Color icon 2. 怎么用 2.1 color使用 <!--1,设置背景和前景色--> <div class="tile bg-blue fg-white ...
- restore和recover的区别(转)
recover和restore的区别: restore just copy the physical file, recover will consistent the database. resto ...
- centos+nginx从零开始配置负载均衡
nginx负载均衡的理解 nginx是一个轻量级的.高性能的webserver,他主要可以干下面两件事: 作为http服务器(和apache的效果一样) 作为反向代理服务器实现负载均衡 现在nginx ...
- Java内存回收机制
在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方面工作都是由JVM自动完成的,降低了Java程序员的学习难度,避免了像C/C++直接操作内存的危险.但是,也正 ...
- Error=Bias+Variance
首先 Error = Bias + Variance Error反映的是整个模型的准确度,Bias反映的是模型在样本上的输出与真实值之间的误差,即模型本身的精准度,Variance反映的是模型每一次输 ...
- Hibernate Hql 总结
1.from子句 Hibernate中最简单的查询语句的形式如下: from eg.Cat该子句简单的返回eg.Cat类的所有实例. 通常我们不需要使用类的全限定名, 因为 auto-import(自 ...
- 【转】七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)
http://blog.csdn.net/xw20084898/article/details/17564957 一.工具:VC+OpenCV 二.语言:C++ 三.原理 otsu法(最大类间方差法, ...
- glade2支持C++代码的输出(2)
今天更新了一个BaseObject的代码:BaseObject.002.zip 同时将glade2生成C++代码的代码进行了调整,基于2.12.2的补丁为:cpp_out_2.patch.tar.xz ...
- Linux 下 Oracle 内核参数优化
数据库的性能优化涉及到整个数据库运行环境的方方面面,诸如操作系统,Oracle自身,存储,网络等等几个大块.而操作系统则是Oracle稳定运行与最大化性能的基石.本文主要描述基于Linux系统下 Or ...