流程控制——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——流程控制语句相关推荐

  1. shell编程之条件判断语句和流程控制语句

    shell条件判断语句和流程控制语句 文章目录 shell条件判断语句和流程控制语句 一.条件判断语法结构 1. 条件判断语法格式 2. 条件判断相关参数 二.流程控制语句 1. 基本语法结构 2. ...

  2. linux bash and,linux bash shell中for的用法and示例

    关于linux bash shell中的for语句 在linux中shell是必不可少的一部分,但是在bash shell中有while,for,until等循环命令,今天就介绍一下关于for的一些用 ...

  3. Java 8 辣么大(lambda)表达式不慌之—–(四)示例-Collectors中的中的joining 方法和mapping方法

    Java 8 辣么大(lambda)表达式不慌之-–(四)示例-Collectors中的joining 方法和mapping方法 joining 方法 mapping方法 先定义好后面做示例要用的数据 ...

  4. Linux之shell中的大括号、中括号、小括号的使用详解+多示例

    摘要:很多人和我一样对于shell的各种括号的各种用法肯定不是很清楚,有时候看见别人脚本都不知道是什么意思,今天就来说说bash中的大中小括号的用法和解释,本人常用bash所以也只能用bash来说明了 ...

  5. shell中的函数shell中的数组告警系统需求分析

    2019独角兽企业重金招聘Python工程师标准>>> 20.16/20.17 shell中的函数 函数的概念 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用 ...

  6. linux系统冒号模式map怎么用,shell中冒号 : 用途说明

    我们知道,在Linux系统中,冒号(:)常用来做路径的分隔符(PATH),数据字段的分隔符(/etc/passwd)等.其实,冒号(:)在Bash中也是一个内建命令,它啥也不做,是个空命令.只起到占一 ...

  7. linux 算术命令,shell中进行算术运算的各种方法

    shell中,无法直接进行算术运算,如果直接进行算术运算会出现如下情况. 从上图可以看出,默认情况下,shell不会直接进行算术运算,而是把"算术符号"当做"字符串&qu ...

  8. linux 变量替换字符串,shell中常用的变量处理、字符串操作(之一)

    在shell中,当我们已经获取到某个变量的变量值的时候,可能还需要对变量值进行一定的处理,才能到我们最终想要的结果,今天我们就来聊聊shell中常见的变量处理方法,我们通常会对变量进行如下处理. 一. ...

  9. 24.shell中list详解,定义list,获取List的总个数,获取list的某个元素值,将list的每个元素转换成以空格分隔的字符串,空格分隔的字符串转换成list,for循环list

    文章目录 前言 定义list 获取List的总个数 获取list的某个元素值 将list的每个元素转换成以空格分隔的字符串 空格分隔的字符串转换成list for循环list 总结 友情链接 前言 s ...

最新文章

  1. java 注解scheduler_使用Scheduler
  2. ubuntu 14.04下spark简易安装
  3. 模板共享指针(shared_ptr)原理实现
  4. python获取系统内存占用信息的实例方法
  5. OutLook 2010 (Bata) 中的邮件导出功能
  6. 苹果公布第三财季财报:大中华区依然是伤心地
  7. java 大学考试_大学java期末考试试题
  8. 什么是面向对象对象,什么是面向过程,什么是面向对象思想。
  9. 2020年Spring学习笔记目录
  10. ThinkPad SL400无线网卡的问题
  11. c语言转义字符o用法,gogo体育下载官网-gogo体育下载官网
  12. H5游戏开发-H5游戏引擎与渠道分布
  13. 金杉号:2022什么工作最赚钱,未来十年最吃香的4个稳定的工作
  14. 计算机网络提升培训心得体会,计算机网络培训心得体会.doc
  15. matlab中class和whos作用
  16. html中创建母版页,自定义“我的网站”母版页
  17. 02点餐项目需求分析
  18. 计算机编程教育资源,风变编程以科技实现教育普惠,俱进教育公平
  19. quill-editor的使用和自定义
  20. Python 提取音乐频谱并可视化

热门文章

  1. 使用snv命令来更新项目
  2. 2022蓝桥杯学习——4.枚举、模拟与排序
  3. android安装服务apk下载,华为服务中心下载
  4. (转)iPhone 字体显示效果大全
  5. java接口自动化_【亲测】Java 接口自动化步骤
  6. 浅论语言文字起源:一个业余人类学家的观察
  7. STL核心知识总结(1)常用容器的用法
  8. 第5章 Spring Boot事务支持
  9. python写抢票软件_2019最新某python编写抢票软件实战教程
  10. macbook air 17 inter 芯片笔记本 安装单系统windows11