shell脚本中的if条件语句介绍和使用案例
#前言:在生产工作中if条件语句是最常使用的,如使用来判断服务状态,监控服务器的CPU,内存,磁盘等操作,所以我们需要熟悉和掌握if条件语句。
简介
- if条件语句,简单来说就是:如果,那么。有if单分支结构,双分支结构,多分支结构
1.单分支结构
#语法结构:
- if <条件表达式>
- then
- 指令
- fi
或
- if <条件表达式>;then
- 指令
- fi
或
- if <条件表达式>
- then
- if <条件表达式>
- then
- fi
- fi
#简单记忆法:
- 如果 <你给我足够多的钱>
- 那么
- 我就给你干活
- 果如
#说明:<条件表达式> 可以是test、[]、[[]]、(())等条件表达式,每一个if条件语句都是以if开头,并带有then,最后以fi结尾
#例子:
- [root@shell scripts]# cat if.sh
- #!/bin/bash
- if [ -f /etc/hosts ]
- then
- echo "[guoke1]"
- fi
- if [[ -f /etc/hosts ]];then
- echo "[[guoke2]]"
- fi
- if test -f /etc/hosts
- then
- echo "guoke3"
- fi
#说明:上面都是判断/etc/hosts是否是文件并是否存在,如果是文件并且存在就打印相关的命令
#执行效果:
- [root@shell scripts]# sh if.sh
- [guoke1]
- [[guoke2]]
- guoke3
#说明:因为/etc/hosts是一个文件并且存在,所以输出后面的相关命令
2.双分支结构:加一个else否则
#if单分支结构主体是:如果....那么....。而双分支结构就是:如果....那么.....否则
#语法结构
- if <条件表达式>
- then
- 命令集1
- else
- 命令集2
- fi
- #简单记忆
- 如果 <你给我足够多的钱>
- 那么
- 我就给你干活
- 否则
- 我再考虑一下
- 果如
#例子:
- [root@shell scripts]# cat if1.sh
- #!/bin/bash
- if [ -f /etc/hosts ]
- then
- echo "is file"
- else
- echo "no file"
- fi
- if [ -f /etc/test ]
- then
- echo "is file"
- else
- echo "no file"
- fi
#执行效果
- [root@shell scripts]# sh if1.sh
- is file
- no file
#说明:因为/etc/test这个文件不存在,所以输出no file
3.多分支结构
#多分支的主体为,"如果.....,那么.....,或者如果......,那么,否则....."
#语法结构
- if <条件表达式1>
- then
- 指令集1
- elif <条件表达式2>
- then
- 指令集2
- else
- 指令集3
- fi
#写多个elif
- if <条件表达式1>
- then
- 指令集1
- elif <条件表达式2>
- then
- 指令集2
- elif <条件表达式3>
- then
- 指令集3
- else
- 指令集4
- fi
#提示:如果加elif,那么就要加then,每个elif都要带有then,最后结尾的else后面没有then
#简单记忆
- 如果 <你有房>
- 那么
- 我就嫁给你
- 或者如果 <你家里有钱>
- 那么
- 我也可以嫁给你
- 或者如果 <你很努力很吃苦>
- 那么
- 我们可以先谈谈男女朋友
- 否则
- 我们没戏
- 果如
#简单例子:
- [root@shell scripts]# cat if2.sh
- #!/bin/bash
- if [ $1 -eq 1 ]
- then
- echo "input 1 success"
- elif [ $1 -eq 2 ]
- then
- echo "input 2 success "
- elif [ $1 -eq 3 ]
- then
- echo "input 3 success"
- else
- echo "input failure"
- fi
#说明:如果传入的第一个参数为1就输出相关命令,或者有如果传入的第一个参数为2,就输出相关命令,后面同理,最后是否则又输出什么
#执行效果
- [root@shell scripts]# sh if2.sh 1
- input 1 success
- [root@shell scripts]# sh if2.sh 2
- input 2 success
- [root@shell scripts]# sh if2.sh 3
- input 3 success
- [root@shell scripts]# sh if2.sh 4
- input failure
4.if条件语句的使用案例
4.1.检查软件包是否安装
#检查sysstat包是否安装
- [root@shell scripts]# cat soft_package.sh
- #!/bin/bash
- if rpm -q sysstat &>/dev/null
- then
- echo "sysstat is already installed."
- else
- echo "sysstat is not installed."
- fi
#说明:使用if判断sysstat包有没有安装,如果安装了就打印already installed已经安装,如果没有安装就打印not installed没有安装
#执行效果
- [root@shell scripts]# sh soft_package.sh
- sysstat is already installed.
#检查mailx包是否安装
- [root@shell scripts]# cat soft_package.sh
- #!/bin/bash
- if rpm -q mailx &>/dev/null;then
- echo "mailx is already installed."
- else
- echo "mailx is not installed."
- fi
#说明:使用if判断mailx包有没有安装,如果安装了就打印already installed已经安装,如果没有安装就打印not installed没有安装
#执行效果
- [root@shell scripts]# sh soft_package.sh
- mailx is not installed.
4.2.监控httpd服务
#提示:使用netstat或ss过滤然后使用wc统计,进行判断,如果结果大于0,就表示运行,否则就发邮件报警然后启动服务
- [root@shell scripts]# cat web.sh
- #!/bin/bash
- if [ `netstat -untpl | grep httpd | wc -l` -gt ];then
- echo "httpd is Running"
- else
- echo "httpd service down" | mail -s "httpd" @qq.com
- systemctl restart httpd
- fi
4.3.监控mysql服务
- [root@shell scripts]# cat mysql_mon.sh
- #!/bin/bash
- if [ `netstat -untpl | grep mysqld | wc -l` -gt ];then
- echo "mysqld is Running"
- else
- echo "mysqld service down" | mail -s "mysqld" @qq.com
- systemctl restart mysqld
- fi
#然后将写的监控脚本放进定时任务里面,多久运行一次检查
#例如:每3分钟执行一遍
- */3 * * * * root /bin/sh /scripts/web.sh &>/dev/null
- */3 * * * * root /bin/sh /scripts/mysql_mon.sh &>/dev/null
#提示:对于开发程序脚本来说,我们一般是先要明白开发需求,然后进行分析,设计思路,然后再编写代码
#例如:监控系统剩余内存的大小,如果小于200M,就邮件报警,每3分钟执行一次
- 思路:
- .先在命令行获取到系统剩余的内存的值
- .配置邮件报警功能
- .进行判断,如果取到的值小于200M,就报警
- .编写shell脚本
- .加入crond定时任务,然后每3分钟检查一次
#总结:if条件语句可以做的事情还有很多,大家可以根据工作需求去多多开发挖掘,下篇将继续写shell脚本的另外一个条件语句case。好了,到这里又要说再见了,写的不好地方还望指出,多多交流提高,下次再会。
shell脚本中的if条件语句介绍和使用案例的更多相关文章
- shell脚本中的case条件语句介绍和使用案例
#前言:这篇我们接着写shell的另外一个条件语句case,上篇讲解了if条件语句.case条件语句我们常用于实现系统服务启动脚本等场景,case条件语句也相当于if条件语句多分支结构,多个选择,ca ...
- shell脚本中多个条件判断的语法
if [ "$content" = "hello" ]\ || [ "$content" = "kitty" ] the ...
- Linux centosVMware shell脚本介绍、shell脚本结构和执行、date命令用法、shell脚本中的变量
一. shell脚本介绍 shell是一种脚本语言 aming_linux blog.lishiming.net 可以使用逻辑判断.循环等语法 可以自定义函数 shell是系统命令的集合 shell脚 ...
- shell脚本中的各种表达式介绍和使用
#前言:在shell脚本中,有各种的表达式,包括有条件测试表达式,文件表达式,字符串表达式,整数表达式,接下来我们来了解一下他们的使用方法 1.条件测试表达式 #首先来看一下条件测试语法 #条件测试语 ...
- 在shell脚本中进行条件控制以及使用循环
转载请标明:http://www.cnblogs.com/winifred-tang94/ if条件语句语法: if [ 条件表达式 ] then 代码 else 代码 fi 注意:在上面的if条件语 ...
- shell脚本介绍、shell脚本结构和执行、date命令用法、shell脚本中的变量
7月11日任务 20.1 shell脚本介绍20.2 shell脚本结构和执行20.3 date命令用法20.4 shell脚本中的变量 20.1 shell脚本介绍 1.shell脚本语言是linu ...
- Shell脚本中执行sql语句操作mysql
对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...
- Shell脚本中执行sql语句操作mysql的5种方法【转】
对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...
- SHELL脚本中执行SQL语句操作MYSQL的5种方法
对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...
随机推荐
- Intellij IDEA 干货分享
更多视频详情:https://www.bilibili.com/video/av89385013/ Intellij IDEA 真是越用越强大 它总是在我们写代码的时候 不时给我们来个小惊喜 出于对 ...
- appium+python自动化实践之查找元素的等待方式笔记
元素等待作用 设置元素等待,可以更加灵活的制定等待定位元素的时间,从而增强脚本的健壮性,提高执行效率. 元素等待类型 强制等待:设置固定等待时间,使用sleep()方法即可实现 from time i ...
- MySQL root密码重置问题
1:进入cmd,停止mysql服务:Net stop mysql (进入服务---->MySql----->停止) 到mysql的安装路径启动mysql,在bin目录下使用mysqld-n ...
- 从头认识js-基本概念(关键字,保留字,数据类型)
语法 ECMAScript的语法大量借鉴了C及其他类C语言(如Java和Perl)的语法.因此,熟悉这些语言的开发人员在接受ECMSAScript更加宽松的语法时,一定会有一种轻松自在的感觉. 区分大 ...
- yii2设置默认控制器
以Yii2高级模板配置为例
- css实现边框动画效果
最近写了几个页面都用到css动画,以及很多before,after伪类.在此记录一下成果.css边框循环动画,页面效果如下: 1.沿着边框动画的图形使用before,after伪类写的.当时想用切图来 ...
- C#爬取微博文字、图片、视频(不使用Cookie)
前两天在网上偶然看到一个大佬OmegaXYZ写的文章,Python爬取微博文字与图片(不使用Cookie) 于是就心血来潮,顺手撸一个C#版本的. 其实原理也很简单,现在网上大多数版本都需要Cooki ...
- Simple: 一个支持中文和拼音搜索的 sqlite fts5插件
之前的工作关系,需要在手机上支持中文和拼音搜索.由于手机上存储数据一般都是用 sqlite,所以是基于 sqlite3 fts5 来实现.这段时间再次入门 c++,所以想用 c++ 实现一下,一来用于 ...
- 【原创】(四)Linux进程调度-组调度及带宽控制
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...
- Layabox enabled 脚本禁用 坑
从unity入坑到Layabox,真的是一路踩坑啊,今天这个坑叫做 脚本禁用 enabled 问题一: 首先看官方文档 https://ldc2.layabox.com/doc/?nav=zh-ts- ...