对于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语句如下:
如果 <你不会if语句> 那么 那肯定长的不帅 果如
2、以上就是单分支的if语句,接下来看看双分支的if语法结构
if <条件表达式> then 指令一 else 指令二 fi
以上就是单分支的if语句结构,那么在举个例子如下:
if [ -f file ] then echo "这是一个普通文件" else echo "NONONO" fi
这个和以上的例子是一样的。同样是测试file是不是一个普通文件,如果是,那么就输出指令1 否则那么就输出指令2
到这里我们在来一个形象描述
如果 <你不会if语句> 那么 就快点学,快点练 否则 你永远都不可能学会 果如
我们发现 单分支和双分支的区别就在于一个有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:<ywyankerp@163.com> # 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 yankerpcs@163.com -t ywyankerp@163.com -s smtp.163.com -u "Nginx测试" -o message-content-type=html -o message-charset=utf8 -xu yankerpcs -xp ******* -m "Nginx正在测试"
这边我已经收到了邮件报警测试的邮件了
3、接下来就可以开始写脚本了如下:
#!/bin/bash # Maintenance:<ywyankerp@163.com> # 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 yankerpcs@163.com -t ywyankerp@163.com -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 yankerpcs@163.com -t ywyankerp@163.com -s smtp.163.com -u "Nginx报警" -o message-content-type=html -o message-charset=utf8 -xu yankerpcs -xp ****** -m "Nginx启动失败尽快查 看!!!" &> /dev/null fi
当我们启动Nginx启动失败时 我们在这里使用特殊的状态变量$"text-align: center">
那么接下来我们执行:
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 yankerpcs@163.com -t ywyankerp@163.com -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这些各种服务的检测脚本那么肯定是没有任何的问题了,包括检测磁盘空间的占用情况等等,都是可以举一反三的,在这里我就不在演示了。
本次就到这里,希望对您有所帮助,再见!小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]