本文主要介绍详细讲解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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。