流程控制——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. shell脚本中if流程控制语句的应用

    上篇关于测试语句的使用规则及相关使用方法,如果仅仅孤立使用时很难有其用武之地,当然在shell脚本中其实不可能孤立存在的,只有与条件语句和控制语句等搭配使用才能使其功能得到最大限度的体现,因此在日常使 ...

  3. Linux shell 编程(七):流程控制语句

    流程控制语句 在shell中如果在终端输入多个命令,如果以&分隔则将命令放入后台执行,如果以;分隔,则表示一个命令集合.shell允许使用逻辑操作符&&和||来作为命令分隔符, ...

  4. 【Linux】shell脚本实战-流程控制语句case

    文章目录 前言 什么是case语句 case语句语法分析 case实战案例 1. 做出你的选择 2. 早饭吃什么 3. apache服务启动脚本实战 总结 前言 前面我们探讨过shell脚本中的if语 ...

  5. shell 编程之流程控制语句详解

    前言 可以说,在任何一门编程语言中都离不开流程控制语句,使用流程控制语句可以帮助程序处理各类复杂的操作,常用的流程控制语句,比如: if-else,while,for循环等,在linux 的shell ...

  6. SHELL/SSH基础知识(入门篇)-包含 shell 脚本语言的基本用法、 shell 脚本语言的基本用法、流程控制、函数 function、其它脚本相关工具、数组 array(欢迎留言交流)

    目录 1 shell 脚本语言的基本用法 1.1 shell 脚本注释规范 1.1.1 shell 脚本注释规范 1.1.2 执行(5种) 1.1.3 在远程主机运行本地脚本 1.1.4 检查shel ...

  7. 一天学会shell语言,shell教程,shell简单入门,shell中文文档

        shell语言是一门linux系统下的工具语言,主要用于写一些linux系统下的操作命令,实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核.或者直接理解为shell命 ...

  8. Nature子刊:宏基因组中挖掘原核基因组的分析流程

    宏基因组中挖掘原核基因组的分析流程 从宿主相关的短读长鸟枪宏基因组测序数据中恢复原核基因组 Recovering prokaryotic genomes from host-associated, s ...

  9. shell中的执行流控制

    shell中的执行流控制 1 for语句 1.1 作用及语句结构 1.2 for语句的基本格式 2 条件语句 2.1 while...do 2.2 until...do 2.3 if语句 2.4 ca ...

  10. shell中的特殊变量

    在shell中,经常需要处理一些特殊的变量,从这些变量里获取必要的信息,常用的变量包括:$#,$*,$@,$0,$? 下面来进行详细说明 $#,调用脚本的命令行参数的个数. $*和$@,脚本的命令行参 ...

最新文章

  1. R3LIVE:一个实时鲁棒、带有RGB颜色信息的激光雷达-惯性-视觉紧耦合系统(香港大学)...
  2. Linux shell 对于文件的删除,复制,修改文件名等操作
  3. php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法
  4. Android之自定义ContentProvider详解
  5. 编写一个项目开发文档
  6. 低压电力采集平台DW710C与PC沟通
  7. 新版ubuntu中打开终端的方法和安装ssh 的方法
  8. 互动留言赠书:《Oracle高性能系统实战大全》
  9. sqlserver的存储过程mysql_mysql,sqlserver存储过程的创建及执行
  10. leetcode string
  11. ERP计划参数如何在线更新
  12. RSS文件的基本格式
  13. python里lambda和filter和map的用法_python中lambda以及与filter/map/reduce结合的用法
  14. 微信小程序实战 wx.showNavigationBarLoading(),下拉动画配置无效
  15. 明天太阳照常升起的概率是多少?
  16. 如何使用TPTP中的IDatapool
  17. 关于zip压缩包日志查询、统计、导出
  18. DirectX11 骷髅头示例Demo
  19. 基于JAVA的类与对象做出的英雄打怪兽程序
  20. word破解文档保护

热门文章

  1. Matlab批量修改fig图片的大小、文字
  2. win10 我的世界java_Minecraft Win10测试版即将发布——再也不用装Java啦
  3. 推荐阅读:钱莉芳老师的《天意》和《天命》
  4. python简单计算器异常处理_【Python 20】BMR计算器4.0(异常处理)
  5. java顺风车匹配_嘀嗒顺风车以“信息匹配六步走”的模式保障“真顺风”
  6. 结界乱斗服务器维护中,结界乱斗变态版
  7. 【转】此版本之魔兽争霸3需要特定语言版本之windows 解决办法
  8. 我那个卧了槽的程序猿男友
  9. 2、VUE指令的使用
  10. 计算机摄像头打不开,日常必看:电脑摄像头打不开是什么情况