shell编程 if,shell脚本if语法

shell编程 if,shell脚本if语法,详解Shell编程之if语句实战(小结)

本文主要介绍详细讲解Shell编程的if语句实战(总结)。边肖认为这很好。现在分享给大家,给大家一个参考。来和边肖一起看看吧。

其实很多人肯定听说过if语句,那么到底什么是if语句呢?简单来说就是类似于汉语中的“如果”。那么,if语句就是linux操作人员在实际环境中使用最频繁、最重要的语句了!

I. if条件语句

1、单分支语句结构

第一种语法如下:

If条件表达式

然后

指令

船方不负担装货费用

第二语法

条件表达式;然后

指令

船方不负担装货费用

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

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

if [ -f文件]

然后

“Echo”是一个普通文件

其他

“Echo”不是一个普通文件

1号出口

船方不负担装货费用

分析,如果文件是一个普通文件,那么执行echo '这是一个普通文件',否则,输出一个'这不是一个普通文件',最后退出脚本。

事实上,下面的命令可以清楚地理解如下if语句:

如果你不知道如果声明

因此

那肯定不帅。

郭茹

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

If条件表达式

然后

指令一

其他

两条指令

船方不负担装货费用

以上是单分支if语句结构,所以下面举个例子:

if [ -f文件]

然后

Echo“这是一个普通文件”

其他

回声'诺诺诺'

船方不负担装货费用

这和上面的例子一样。它还测试文件是否是一个普通文件。如果是,它将输出指令1;否则,它将输出指令2。

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

如果你不知道如果声明

因此

赶紧学着练就行了。

否则

你永远也学不会

郭茹

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

3、多分支if语句结构

上面讲了单分支和双分支,这里还有一个多分支。我们可以理解为双枝包含单枝,那么多枝必然包含单枝和双枝:个人理解,好像有点绕路?让我们来看看多分支,如下所示:

if语句的多分支结构的主体是:if.然后.否则如果.然后.否则如果.然后,

示例1:

if [ -f文件]

然后

回声'是是是'

elif [ -z文件]

然后

回声“是是”

其他

回声'诺诺诺'

船方不负担装货费用

解释下图:

看完图还不明白?没有关系如下:

这里应该没问题~ ~

单分支if条件语句的实践

将以下测试文件中的条件表达式更改为if条件语句。

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

修改如下:

if [ -f文件]

然后

回声“是”

其他

回声“不”

船方不负担装货费用

运行结果如下:

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

[root@shell-yankerp sh]# sh cs.sh

[root @ shell-yankerp sh]# cat cs . sh

#!/bin/bash

# Maintenance:ywyankerp@163.com

# BINLOG:www.ywyankai.cn

#日期:中国中部时间2018年02月03日03时31分35秒04秒

#测试脚本

if [ -f文件]

然后

回声“是”

其他

回声“不”

船方不负担装货费用

[root@shell-yankerp sh]#

至此,if的一些基本语法应该掌握了,接下来做点实际的吧。

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

这一章其实有很多案例,但是还是那句话,我还是想把整个剧本用我的想法写出来,这样才能把我的整个过程表达出来!

首先,我们要知道为什么要写这个剧本。我们的目的是什么?最终需要达到什么样的效果?这个脚本可以实现什么样的功能?我觉得这是我们首先需要考虑的。然后我们可以用这些问题编写我们的shell脚本。

那么我们可以按照上面的要求分成三个部分,比如:如何检查Nginx服务是否启动?我们如何看待Nginx服务宕机的一些情况?最后,我们需要知道我们用什么工具来实现这个邮件警报。

1、如何查看Nginx启动?

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

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

也就是说使用命令wc -l L就可以知道它的行号,只有一行,所以显示的是1,我们关闭Nginx再检查一遍。

当我们关闭Nginx时,它没有关于Nginx的端口80和服务名称的信息,所以如果显示0,那么我们可以再次得出结论。如果netstat -anput | grep Nginx | wc -l的输出为1,那么Nginx启动,输出为0,那么Nginx已经停止运行;

到目前为止,我们已经知道了两条信息:如何检查Nginx服务是否启动?我们如何看待Nginx服务宕机的一些情况?

然后留下邮件提醒。我们可以使用sendmail来实现它。安装过程如下:

1.安装相关的依赖包

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

2.解压并安装

[root @ shell-yankerp ~]# tar zxf sendEmail-v1.56.tar.gz

[root @ shell-yankerp ~]# CD send email-v 1.56/

[root @ shell-yankerp sendmail-v 1.56]# CP sendmail/usr/local/bin/sendmail

在这里,我们先试着发送一封邮件,以确保可以发送。

复制代码如下:

[root @ shell-yankerp ~]#/usr/local/bin/Email-f yankerp cs @ 163 . com-t ywyankerp @ 163 . com-s SMTP . 163 . com-u ' nginx test '-o message-content-type=html-o message-charset=utf8-xuyanke rpcs-XP * * * * *-m ' nginx正在测试'

在这里,我收到了电子邮件报警测试的电子邮件。

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

#!/bin/bash

# Maintenance:ywyankerp@163.com

# BINLOG:www.ywyankai.cn

#日期:中国中部时间2018年02月03日03时31分35秒04秒

#测试脚本

NX=` netstat-an put | grep nginx | WC-l '

if [ '$NX' -eq 0 ]

然后

/usr/local/nginx/sbin/nginx

船方不负担装货费用

如果[ '$?'-ne 0 ]

然后/usr/local/bin/send email-f yankerpcs @ 163 . com-t ywyankerp @ 163 . com-s SMTP . 163 . com-u ' nginx alarm '-o message-content-type=html-o message-charset=utf8-xuyanke rpcs-XP * * * * * *-m ' nginx未能尽快启动。

看啊!/dev/null

船方不负担装货费用

在这里我将一一解释:

NX=` netstat-put | grep Nginx | WC-L `:这是上面测试的命令。如果nginx宕机,输出0,正常运行,那么输出1,确定Nginx的健康状态。变量NX被赋值。

If ['$NX' -eq 0] //如果NX执行的结果为0

然后//然后

/usr/local/nginx/sbin/nginx //启动nginx服务

船方不负担装货费用

最后的终结者fi

如果[ '$?'-ne 0 ]

然后/usr/local/bin/send email-f yankerpcs @ 163 . com-t ywyankerp @ 163 . com-s SMTP . 163 . com-u ' nginx alarm '-o message-content-type=html-o message-charset=utf8-xuyanke rpcs-XP * * * * *-m ' nginx启动失败。尽快检查一下。

看啊!/dev/null

船方不负担装货费用

当我们启动Nginx时,我们使用特殊的状态变量$?检查最后一个命令是否为0。如果为0,则成功。说明:如果Nginx启动失败,那么将执行/usr/local/bin.就是这个邮件报警程序输出了一个Nginx启动失败。尽快检查一下!

最终的脚本如下所示:

然后我们将执行:

1.首先,我们模拟Nginx停机,然后运行脚本。

在第一个命令中,我们可以看到Nginx没有启动。当我们运行脚本时,它会在检测到nginx关闭时启动。下面的语句实现如下:

NX=` netstat-an put | grep nginx | WC-l '

if [ '$NX' -eq 0 ]

然后

/usr/local/nginx/sbin/nginx

船方不负担装货费用

2.我们尝试修改Nginx的启动路径,故意展示Nginx启动失败的情节,以此来测试邮箱能否正常接收。

修改后运行此脚本。

实现这种效果的脚本如下:

如果[ '$?'-ne 0 ]

然后/usr/local/bin/send email-f yankerpcs @ 163 . com-t ywyankerp @ 163 . com-s SMTP . 163 . com-u ' nginx alarm '-o message-content-type=html-o message-charset=utf8-xuyanke rpcs-XP * * * * *-m ' nginx启动失败。尽快检查一下!'/dev/null

船方不负担装货费用

然后我们添加了一个调度任务,每1分钟执行一次脚本。

实际上,这是我们的一个例子的结尾。虽然表面上这是个例子,但是MySQL PHP?SSHD的各种服务的检测脚本肯定没有问题,包括检测磁盘空间占用等。可以举一反三,这里就不论证了。

这次到此为止。希望对你有帮助。再见!我觉得边肖挺好的。现在分享给大家,给大家一个参考。来和边肖一起看看吧。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: