day66-shell编程之-if条件语句

1、 if条件语句

if条件语句,简单来说,其语义类似于汉语中的“如果...那么...”。if语句是Linux运维人员在实际生产过程中使用的最频繁也是最重要的语句。因此,务必重视if条件语句的知识,并牢固掌握。

1.1 单分支
1.1.1语法
\\第一种语法:
if <条件表达式>
then
    指令
fi
\\第二种语法:
if <条件表达式>;then
    指令
fi
1.1.2 逻辑流程图
16955089-cba656ff04ade4c1.png
1.1.3 if表达式嵌套

if单分支语句执行流程图的条件语句还可以嵌套(即if条件语句中还有if条件语句),注意每个if条件语句中都要有一个与之对应的fi(反if),每个if和它下面最近的fi成对搭配,语法如下所示:

if <条件表达式>;then
    if <条件表达式>;then
        指令
    fi
fi
1.1.4 和之前条件表达式的关系

if条件语句相对于之前讲过的文件表达式[ -f “$file” ] && echo 1等价于下面的if语句

if [ -f “file”]; then
    echo 1
fi

if条件语句的单分支,如果形象的使用中文解释的话,相当于一个女孩这么对你说:

如果 <你有房>;那么
    我就嫁给你
果如
1.2 双分支
1.2.1 语法

if条件语句的单分支结构主体是“如果...那么...”,而if条件语句的双分支结构主体则为“如果...那么...否则...”。if条件语句的双分支结构语法为:

if<条件表达式>;then
    指令集1
else
    指令集2
fi
1.2.2 和之前条件表达式的关系

前文的文件测试表达式[ -f “file” ] && echo 1 || echo 0就相当于下面的双分支的if条件语句

if [ -f “file”]; then
    echo 1
else
    echo 0
fi

同样的,if条件语句的双分支,如果形象的使用中文解释的话,相当于一个女孩这么对你说:

如果 <你有房>;那么
我就嫁给你
否则
    我再考虑一下
果如
1.2.3 逻辑流程图
16955089-a1befbc8453d0609.png
1.3 多分支

if条件语句多分支结构主体为“如果...,那么...,否则如果...,那么... 否则如果...,那么...,否则”

3.1 语法

if条件语句多分支语法为:

if<条件表达式>;then
    指令集1
elif <条件表达式>;then
    指令集2
else
    指令集3
fi

if条件语句的多分支,如果形象的使用中文解释的话,相当于一个女孩这么对你说:

如果 <你有房>;那么
    我就嫁给你
或者如果 <你爸有背景>;那么
    我也可以嫁给你
或者如果 <你很努力很吃苦>;那么
    我们可以先谈谈男女朋友
否则
    再见
果如
1.3.2 逻辑流程图
16955089-072d5b0923ac9ff3.png

1.5 案例实操

1.5.1 判断nginx是否活着,如果没有活着就打印“邮件报警”(判断依据:curl/wget访问url)
1.5.2 利用自己编译的nginx,写一个nginx的启动脚本,需求如下:
  1. 类似于/etc/init.d/nginxd {start|stop|restart}
  2. 使用systemctl实现开机自启动管理

分析:
# 编译nginx
# 如果参数是start,则执行start的启动方式(/application/nginx/sbin/nginx)
# 如果参数是stop,则执行stop的关闭方式(/application/nginx/sbin/nginx –s stop)
# 如果stop的时候,没有进程,则输出一句话,"nginx 处于关闭状态"
# 如果是restart,则先执行stop,再执行start

[root@shell-project~]# cat /etc/init.d/nginxd
#!/bin/bash

# 定义变量
count=`netstat -lntup|grep nginx|wc -l`

#定义函数
function nginx_start(){
    if [ $count -gt 0 ];then
        echo 'nginx已经处于启动状态'
    else
        /application/nginx/sbin/nginx
        echo 'nginx启动成功'
    fi
}
function nginx_stop(){
    if [ $count -eq 0 ];then
        echo 'nginx已经处于关闭状态'
    else
        /application/nginx/sbin/nginx -s stop
        echo 'nginx已关闭'
    fi
}
# 如果参数是start,则执行start的启动方式(/application/nginx/sbin/nginx)
if [ "$1" = "start" ];then
    nginx_start
# 如果参数是stop,则执行stop的关闭方式(/application/nginx/sbin/nginx –s stop)
# 如果stop的时候,没有进程,则输出一句话,"nginx 处于关闭状态"
elif [ "$1" = "stop" ];then
    nginx_stop
# 如果是restart,则先执行stop,再执行start
elif [ "$1" = "restart" ];then
    nginx_stop
    sleep 2
    nginx_start
    echo 'nginx重启成功'
else
    echo '参数错误,正确的参数是{start|stop|restart}'
fi
[root@shell-project~]# 
[root@shell-project ~]# cat /usr/lib/systemd/system/nginx_wenjuan.service
[Unit]
Description=nginx service
After=nginx_wenjuan.target

[Service]
Type=forking
ExecStart=/etc/init.d/nginxd start
ExecReload=/etc/init.d/nginxd restart
ExecStop=/etc/init.d/nginxd stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target
[root@shell-project ~]#
[root@shell-project ~]# chmod +x /etc/init.d/nginxd

[root@shell-project ~]# systemctl start nginx_wenjuan.service
[root@shell-project /application]# systemctl status nginx_wenjuan
● nginx_wenjuan.service - nginx service
   Loaded: loaded (/usr/lib/systemd/system/nginx_wenjuan.service; disabled; vendor preset: disabled)
   Active: active (running) since Thu 2019-07-18 00:27:52 CST; 2s ago
  Process: 11715 ExecStop=/etc/init.d/nginxd stop (code=exited, status=0/SUCCESS)
  Process: 11724 ExecStart=/etc/init.d/nginxd start (code=exited, status=0/SUCCESS)
 Main PID: 11730 (nginx)
   CGroup: /system.slice/nginx_wenjuan.service
           ├─11730 nginx: master process /application/nginx-1.16.0/sbin/nginx
           └─11731 nginx: worker process

Jul 18 00:27:52 shell-project systemd[1]: Stopped nginx service.
Jul 18 00:27:52 shell-project systemd[1]: Starting nginx service...
Jul 18 00:27:52 shell-project nginxd[11724]: nginx启动成功
Jul 18 00:27:52 shell-project systemd[1]: Started nginx service.
[root@shell-project /application]#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值