四个示例教会你Shell中的if、then、elif、else——流程控制语句
流程控制——if
1. 单分支if条件语句
语法:
if [ 条件判断式 ];then程序
fi
或者
if [ 条件判断式 ]then程序
fi
注意事项:
- if语句使用fi结尾,和一般语言使用大括号结尾不同
[ 条件判断式 ]
就是使用test命令判断,所以中括号和条件判断式之间必须有空格。- then后面跟符合条件之后执行的程序,可以放在[]之后,用“
;
”分割。也可以换行写入,就不需要“;
”了。
示例1:统计根分区使用率
制作一个脚本,用来统计根分区的使用率。
我们先给出全部的代码,然后来一步步分解:
#!/bin/bash
# 统计根分区的使用率
# Author:Veeja.Liu
rate=$(df -h | grep "dev/vda1" | awk '{print $5}' | cut -d "%" -f1)
# 把根分区使用率作为变量赋予变量rate
if [ $rate -ge 80 ]thenecho "Warning! /dev/vda1 is full!!"
fi
首先是df命令,这个命令可以查看分区的使用率,例如:
我们可以看到我们的挂载点为根分区的对应文件系统为/dev/vda1
,接下来使用命令grep筛选出这一行:
然后我们看到我们想要的13在第五列,再使用awk把第五列提取出来:
我们现在得到的12%
,我们现在想要的是12这个数字,接下来:使用cut命令
,使用-d
参数指定%
为分隔符,然后使用-f
参数提取第一列:
我们最后把这个值赋给了变量rate:
rate=$(df -h | grep "dev/vda1" | awk '{print $5}' | cut -d "%" -f1)
然后我们使用条件表达式 [ $rate -ge 80 ]
判断rate的值是否大于80,如果大于80,就在屏幕上输出一句话:“Warning! /dev/vda1 is full!!”。
2. 双分支if条件语句
语法:
if [ 条件判断式 ]then条件成立时,执行的程序else条件不成立时,执行的另一个程序
fi
示例2 备份mysql数据库
#!/bin/bash
#备份MySQL数据库
#Author:Veeja.LIUntpdate asia.pool.ntp.org &>/dev/null
#同步系统时间
date=$(date +%y%m%d)
#把当前系统时间按照“年月日”格式赋予变量date
size=$(du -sh /var/lib/mysql)
#统计mysql数据库的大小,并把大小赋予size变量if [ -d /tmp/dbbak ]thenecho "Date : $date!" > /tmp/dbbak/dbinfo.txtecho "Data size : $size" >> /tmp/dbbak/dbinfo.txtcd /tmp/dbbaktar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &> /dev/nullrm -rf /tmp/dbbak/dbinfo.txtelsemkdir /tmp/dbbakecho "Date : $date!" > /tmp/dbbak/dbinfo.txtecho "Data size : $size" >> /tmp/dbbak/dbinfo.txtcd /tmp/dbbaktar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &> /dev/nullrm -rf /tmp/dbbak/dbinfo.txt
fi
示例3 判断Apache是否启动
#!/bin/bash
#Author:Veeja.LIU
port=$(nmap -sT 127.0.0.1 | grep http | grep tcp | awk '{print $2}' )
#使用nmap命令扫描服务器,并且截取Apache服务的状态,赋予变量port
if [ "$port" == "open" ]thenecho "$(date) httpd is ok!" >> /tmp/autostart-acc.logelse/etc/rc.d/init.d/httpd start &> /dev.nullecho "$(date) restart httpd !!" >> /tmp/autostart-err.log
fi
nmap
是一个远程扫描端口的程序,例如我们可以测试一下我的本地的ip地址:
然后我们把带有“tcp”和“http”的行列出来,取第二个字段的值,如果是open,就代表Apache服务已经启动了。
3. 多分支if条件语句
if [ 条件判断式1 ]then当条件判断式1成立时,执行程序1
elif [ 条件判断式2 ]then当条件判断式2成立时,执行程序2...省略更多条件...
else当所有条件都不成立的时候,最后执行此程序
fi
示例4 判断用户输入的是什么文件
#!/bin/bash
#判断用户输入的是什么文件
#Author:Veeja.LIUread -p "Please input a filename:" file
# 接收用户键盘的输入,并且赋予变量fileif [ -z "$file" ]
#判断file变量是否为空thenecho "Error, please input a filename!"exit 1
elif [ ! -e "$file" ]
#判断file的值是否存在thenecho "Your input is not a file!"exit 2
elif [ -f "$file" ]
#判断file的值是否为普通文件thenecho "$file is a regulare file!"
elif [ -d "$file" ]
#判断file的值是否为目录文件thenecho "$file is a directory!"
elseecho "$file is an other file!"
fi
四个示例教会你Shell中的if、then、elif、else——流程控制语句相关推荐
- shell编程之条件判断语句和流程控制语句
shell条件判断语句和流程控制语句 文章目录 shell条件判断语句和流程控制语句 一.条件判断语法结构 1. 条件判断语法格式 2. 条件判断相关参数 二.流程控制语句 1. 基本语法结构 2. ...
- linux bash and,linux bash shell中for的用法and示例
关于linux bash shell中的for语句 在linux中shell是必不可少的一部分,但是在bash shell中有while,for,until等循环命令,今天就介绍一下关于for的一些用 ...
- Java 8 辣么大(lambda)表达式不慌之—–(四)示例-Collectors中的中的joining 方法和mapping方法
Java 8 辣么大(lambda)表达式不慌之-–(四)示例-Collectors中的joining 方法和mapping方法 joining 方法 mapping方法 先定义好后面做示例要用的数据 ...
- Linux之shell中的大括号、中括号、小括号的使用详解+多示例
摘要:很多人和我一样对于shell的各种括号的各种用法肯定不是很清楚,有时候看见别人脚本都不知道是什么意思,今天就来说说bash中的大中小括号的用法和解释,本人常用bash所以也只能用bash来说明了 ...
- shell中的函数shell中的数组告警系统需求分析
2019独角兽企业重金招聘Python工程师标准>>> 20.16/20.17 shell中的函数 函数的概念 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用 ...
- linux系统冒号模式map怎么用,shell中冒号 : 用途说明
我们知道,在Linux系统中,冒号(:)常用来做路径的分隔符(PATH),数据字段的分隔符(/etc/passwd)等.其实,冒号(:)在Bash中也是一个内建命令,它啥也不做,是个空命令.只起到占一 ...
- linux 算术命令,shell中进行算术运算的各种方法
shell中,无法直接进行算术运算,如果直接进行算术运算会出现如下情况. 从上图可以看出,默认情况下,shell不会直接进行算术运算,而是把"算术符号"当做"字符串&qu ...
- linux 变量替换字符串,shell中常用的变量处理、字符串操作(之一)
在shell中,当我们已经获取到某个变量的变量值的时候,可能还需要对变量值进行一定的处理,才能到我们最终想要的结果,今天我们就来聊聊shell中常见的变量处理方法,我们通常会对变量进行如下处理. 一. ...
- 24.shell中list详解,定义list,获取List的总个数,获取list的某个元素值,将list的每个元素转换成以空格分隔的字符串,空格分隔的字符串转换成list,for循环list
文章目录 前言 定义list 获取List的总个数 获取list的某个元素值 将list的每个元素转换成以空格分隔的字符串 空格分隔的字符串转换成list for循环list 总结 友情链接 前言 s ...
最新文章
- java 注解scheduler_使用Scheduler
- ubuntu 14.04下spark简易安装
- 模板共享指针(shared_ptr)原理实现
- python获取系统内存占用信息的实例方法
- OutLook 2010 (Bata) 中的邮件导出功能
- 苹果公布第三财季财报:大中华区依然是伤心地
- java 大学考试_大学java期末考试试题
- 什么是面向对象对象,什么是面向过程,什么是面向对象思想。
- 2020年Spring学习笔记目录
- ThinkPad SL400无线网卡的问题
- c语言转义字符o用法,gogo体育下载官网-gogo体育下载官网
- H5游戏开发-H5游戏引擎与渠道分布
- 金杉号:2022什么工作最赚钱,未来十年最吃香的4个稳定的工作
- 计算机网络提升培训心得体会,计算机网络培训心得体会.doc
- matlab中class和whos作用
- html中创建母版页,自定义“我的网站”母版页
- 02点餐项目需求分析
- 计算机编程教育资源,风变编程以科技实现教育普惠,俱进教育公平
- quill-editor的使用和自定义
- Python 提取音乐频谱并可视化