Shell if语句 详解Shell编程之if语句实战(小结)(IT技术)

您所在的位置:网站首页 shell编程if Shell if语句 详解Shell编程之if语句实战(小结)(IT技术)

Shell if语句 详解Shell编程之if语句实战(小结)(IT技术)

2022-06-13 00:02| 来源: 网络整理| 查看: 265

想了解详解Shell编程之if语句实战(小结)的相关内容吗,789-yankerp在本文为您仔细讲解Shell if语句的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:Shell,if语句,shell编程if语句,下面大家一起来学习吧。

对于if语句,其实很多人都肯定的听说过,那么if语句到底是什么,简单的说,就类似于汉语里面的如果----那么,if语句是linux运维人员在实际环境中使用的最频繁也是最重要的语句!!!

一、if条件语句

1、单分支语句结构

第一种语法如下:

if then 指令 fi

第二种语法

if ; then 指令 fi

在以上这两种方式中我还是喜欢用第一种,这个是看个人习惯的。在上面的两个语法中可以是 test [] [[]] (())等条件表达式,甚至可以使用命令作为条件表达式。注意:每个if语句都是以if开头 fi结束,中间并带有then;

其实很简单,举个例子如下:

if [ -f file ] then echo "是一个普通文件" else echo "不是一个普通文件" exit 1 fi

剖析:如果file是一个普通文件,那么就执行echo "是一个普通文件"  否则 输出一条"不是一个普通文件" 最后退出脚本

其实以下的这段命令更能清晰的了解if语句如下:

如果 那么 那肯定长的不帅 果如

2、以上就是单分支的if语句,接下来看看双分支的if语法结构

if then 指令一 else 指令二 fi

以上就是单分支的if语句结构,那么在举个例子如下:

if [ -f file ] then echo "这是一个普通文件" else echo "NONONO" fi

这个和以上的例子是一样的。同样是测试file是不是一个普通文件,如果是,那么就输出指令1 否则那么就输出指令2

到这里我们在来一个形象描述

如果 那么 就快点学,快点练 否则 你永远都不可能学会 果如

我们发现 单分支和双分支的区别就在于一个有else 一个没有。

3、多分支if语句结构

我们在上面说了 单分支和双分支 这里又有了一个多分支,我们可以理解为双分支里面包含了单分支,那么多分支里面肯定包含了单分支+双分支:个人理解,好像有点绕? 先来看看多分支吧 如下:

if 语句多分支结构主体为:如果.....那么....否则如果.....那么.....否则如果.....那么,,,,

例1:

if [ -f file ] then echo "yes yes yes" elif [ -z file ] then echo "yes yes" else echo "nonono" fi

解释如下图:

看完图还是没理解? 没有关系 如下:

到这里应该是没有问题了~~

单分支if条件语句实践

把下面的测试文件中条件表达式改为if条件语句

[root@shell-yankerp sh]# [ -f file ] && echo "yes" || echo "no" yes

修改如下:

if [ -f file ] then echo "yes" else echo "no" fi

运行结果如下:

[root@shell-yankerp sh]# [ -f file ] && echo "yes" || echo "no" yes [root@shell-yankerp sh]# sh cs.sh yes [root@shell-yankerp sh]# cat cs.sh #!/bin/bash # Maintenance: # BINLOG:www.ywyankai.cn # DATE:03:31:35 CST, Sunday, 02 month, 2018, 04 # Test scripts if [ -f file ] then echo "yes" else echo "no" fi [root@shell-yankerp sh]#

到这里if的一些基本语法应该掌握了,那么我们接下来,来点实际的。

实战1:开发shell脚本检测Nginx服务是否正常启动 如果宕机,那么就设置邮箱报警!!!

其实此章有很多的案例,但是还是那句话,我还是想用我的思想来编写整个脚本,这样能表达出来我的整个过程!

首先我们要知道为什么要写这个脚本?,我们的目的是要干什么?最后需要实现什么样的效果?,写了这个脚本到底能实现什么样的功能? 我感觉这个是我们首先需要考虑的问题。随后我们就可以带着这些问题,去编写我们的shell脚本

那么我们可以根据以上的需求分为三块 如:如何查看Nginx服务是否启动?  我们如何查看Nginx服务宕机时候的一些情况。 最后我们需要知道我们用什么样的工具来实现这个邮箱报警。

1、如何查看Nginx启动?

我们可以通过netstat -anput | grep nginx 来查看Nginx是否启动如下:

首先通过上图我们得到的信息是:我们可以通过上面那条命令来查看,那么接下来我们肯定是需要写在脚本中的,通过我们的if条件测试语句来写,最后我们进行比较,所以这时候我们最好的方法是提取它的行号,如下:

也就是说 使用wc -l这个命令可以知道它的行号,只有一行 所以显示1,那么我们来关闭Nginx再次查看

当我们关闭Nginx时 它已经没有80端口以及Nginx服务名的一些信息了,所以显示0 那么我们现在又能得出一个结论,如果 netstat -anput | grep nginx | wc -l 输出的为1 那么Nginx是启动的 输出的为0 那么Nginx已经停止运行;

到这里我们的两个信息已经知道了:如何查看Nginx服务是否启动?  我们如何查看Nginx服务宕机时候的一些情况。

那么就接下来就剩下邮件告警了,我们可以使用sendmail来实现,安装如下:

1.安装相关的依赖包

[root@shell-yankerp sh]# yum install perl-Net-SSLeay perl-IO-Socket-SSL -y

2.解压并安装

[root@shell-yankerp ~]# tar zxf sendEmail-v1.56.tar.gz [root@shell-yankerp ~]# cd sendEmail-v1.56/ [root@shell-yankerp sendEmail-v1.56]# cp sendEmail /usr/local/bin/sendEmail

到这里我们先发个邮件试试,确保邮件可以发送

复制代码 代码如下: [root@shell-yankerp ~]# /usr/local/bin/sendEmail -f [email protected] -t [email protected] -s smtp.163.com -u "Nginx测试" -o message-content-type=html -o message-charset=utf8 -xu yankerpcs -xp ******* -m "Nginx正在测试" 

这边我已经收到了邮件报警测试的邮件了

3、接下来就可以开始写脚本了如下:

#!/bin/bash # Maintenance: # BINLOG:www.ywyankai.cn # DATE:03:31:35 CST, Sunday, 02 month, 2018, 04 # Test scripts NX=`netstat -anput | grep nginx | wc -l` if [ "$NX" -eq 0 ] then /usr/local/nginx/sbin/nginx fi if [ "$?" -ne 0 ] then /usr/local/bin/sendEmail -f [email protected] -t [email protected] -s smtp.163.com -u "Nginx报警" -o message-content-type=html -o message-charset=utf8 -xu yankerpcs -xp ******* -m "Nginx启动失败尽快查 看!!!" &> /dev/null fi

在这里我会一条条的解释:

NX=`netstat -anput | grep nginx | wc -l`  :这就是上面测试的那条命令,如果Nginx宕机就输出0 正常运行那么就输出1 来确定Nginx运行状况赋值给了变量NX

if [ "$NX" -eq 0 ] //如果NX执行的结果为0 then //那么 /usr/local/nginx/sbin/nginx //启动nginx服务 fi

最后结束符fi

if [ "$?" -ne 0 ] then /usr/local/bin/sendEmail -f [email protected] -t [email protected] -s smtp.163.com -u "Nginx报警" -o message-content-type=html -o message-charset=utf8 -xu yankerpcs -xp ****** -m "Nginx启动失败尽快查 看!!!" &> /dev/null fi

当我们启动Nginx启动失败时 我们在这里使用特殊的状态变量$? 查看上一条命令是否为0 是0就是成功。解释:如果启动Nginx失败,那么就会执行 /usr/local/bin.....就是这个邮箱报警程序 输出一条 Nginx启动失败尽快查看!!!

最后的脚本是这样的 如下:

那么接下来我们执行:

1.首先我们模拟Nginx宕机,随后运行脚本

在第一条命令我们可以看到nginx没有启动 当我们运行脚本它检测到了Nginx宕机后就会执行启动操作是以下语句实现的如下:

NX=`netstat -anput | grep nginx | wc -l` if [ "$NX" -eq 0 ] then /usr/local/nginx/sbin/nginx fi

2、我们尝试修改Nginx的启动路径,故意出现Nginx启动失败的情节,来测试邮箱是否能够正常接收

修改完成后运行此脚本

实现此效果的脚本段如下:

if [ "$?" -ne 0 ] then /usr/local/bin/sendEmail -f [email protected] -t [email protected] -s smtp.163.com -u "Nginx报>警" -o message-content-type=html -o message-charset=utf8 -xu yankerpcs -xp ****** -m "Nginx启动失败尽>快查看!!!" &> /dev/null fi

随后我们添加计划任务 每1分钟执行一次脚本

其实到这里我们的一个实例就结束了,虽然这表面上是一个实例,但是MySQL PHP? SSHD这些各种服务的检测脚本那么肯定是没有任何的问题了,包括检测磁盘空间的占用情况等等,都是可以举一反三的,在这里我就不在演示了。 

本次就到这里,希望对您有所帮助,再见!小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

相关文章Shell case语句 Shell编程之case语句实战(小结)Shell 脚本面试 分享70个经典的 Shell 脚本面试题与答案shell面试题 非常好的12道shell命令经典面试问题node.js adb shell 实现抖音抢红包 利用adb shell和node.js实现抖音列出所有Bash Shell内置命令 列出所有Bash Shell内置命令的方法示例PowerShell在Ubuntu系统的使用 基于PowerShell在Ubuntu系统的使用详iOS shell修改属性 iOS通过shell脚本批量修改属性PowerShell中Job相关命令及并行执行任务 PowerShell中Job相关命令及PHP设计模式之装饰器模式 PHP设计模式之装饰器模式vue element icon 图标 Vue Element使用icon图标教


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3