21.shell语言之if条件判断语句

21.shell语言之if条件判断语句shell的if语法和C语言等高级语言非常相似,唯一需要注意的地方就是shell的if语句对空格方面的要求比较严格(其实shell对所有语法的空格使用都比较严格)。注意:1、[]表示条件测试。注意这里的空格很重要。要注意在’[‘后面和’]’前面都必须要有空格2、在shell中,then和fi是分开的语句。如果要在同一行里面输入,则需要用分号将他们隔开。3、注意if判断中对于变量的处理,需要加引号,以免一些不必要的错误。

大家好,又见面了,我是你们的朋友全栈君。

? 个人简介

  • ? 作者简介:大家好,我是小鹏linux,运维领域新星创作者。?
  • ? 个人主页:小鹏linux?
  • ? 支持我:点赞?+收藏⭐️+留言?
  • ?格言:你未必出类拔萃,但一定与众不同!?

系列专栏:
               ? 阶段一:windows基础                        原创16篇
               ? 阶段二:Linux基础知识                      原创38篇
               ? 阶段三:shell基础+shell高级              原创21篇
               ? 阶段四:python基础及自动化应用      原创未开始
               ? 阶段五:Linux网络服务                       原创未开始
               ? 阶段六:集群原理及架构                     原创未开始
               ? 阶段七:云计算虚拟化技术
                 原创未开始

目录

1.单分支if条件语句

1.1举例:判断目录是否存在,不存在则创建

2.双分支if条件语句

2.1举例:监听并自动重启apache服务脚本

3.多分支if条件语句

3.1举例:判断用户输入的是文件还是目录

4.case条件语句

4.1举例:创建启动脚本,让service命令管理apache

4.2举例:创建启动脚本,让service命令管理nginx


1.单分支if条件语句

then后面跟符合条件之后执行的程序,可以放在[]之后,用;分隔。也可以换行写入,

就不需要“;”了。

比如:

if   [  条件判断式  ] 
    then
        程序 
fi 

1.1举例:判断目录是否存在,不存在则创建

#!/bin/bash
#date:2022-4-13
#描述:if单分支语句示例,判断目录是否存在
read -p "请输入需要判断的目录:" name
if [ ! -d $name ]
    then
	    echo "$name目录不存在,正在创建..."
	    mkdir -p $name
	    echo "$name目录创建完成."
fi
	    echo "$name目录已存在,正在退出..."

2.双分支if条件语句

if   [  条件判断式  ] 
    then
        条件成立时,执行的程序。 
    else
        条件不成立时,执行的另一个程序。 
fi

2.1举例:监听并自动重启apache服务脚本

在日常工作中,服务器上的服务经常会宕机。如果我们对服务器监控不好,就会造成服务器中服务宕机了,而管理员却不 知道的情况。这是我们可以写一个脚本来监听本机的服务。如果服务停止或宕机了,可以自动重启这些服务。用apache举例:

首先介绍端口扫描命令

nmap端口扫描命令,

格式:nmap -sT 域名或IP

子选项:

        -s         扫描

        -T        扫描所有开启的TCP端口 

nmap扫描后显示的端口一定是存活的。

脚本要使用nmap命令,首先用yum -y install nmap安装。

apache服务也是yum安装。

[root@xiaopeng ~]# cat autostart.sh 
#!/bin/bash 
port=$(nmap -sT 192.168.22.222 | grep tcp | grep http | awk '{print $2}') 
if [ "$port" == "open" ] 
    then 
        echo "$(date) httpd is ok!" >> /tmp/autostart-acc.log 
    else 
        /etc/rc.d/init.d/httpd start &> /dev/nullecho "$(date) restart httpd!!" >> /tmp/autostart-err.log 
fi

(首先用nmap命令查看是否开启apache并赋值给port。

然后进行条件判断。如果服务开启,输出当前时间+httpd is ok 到/tmp/autostart-

acc.log。

如果变量port的值不是open,那么执行else下操作。首先启动apache服务,将启动后 信息输出至位桶,然后在/tmp/autostart-err.log中记录。在本次脚本中nmap命令使用的是

IP查找端口,但并未指DNS,所以会报DNS不存在的错,但不影响结果。)

3.多分支if条件语句

if   [  条件判断式1  ] 
    then
        当条件判断式1成立时,执行程序1。 
elif  [  条件判断式2  ] 
    then
        当条件判断式2成立时,执行程序2。 
        ......(可加入更多条件) 
    else
        当所有条件不成立时,最后执行此程序。 
fi

3.1举例:判断用户输入的是文件还是目录

#!/bin/bash
#date:2022-4-13
#描述:判断文件类型
read -p "请输入一个文件:" file
if [ -z $file ]
    then
	    echo	"错误!输入的文件为空."
elif [ ! -e $file ]
    then
	    echo	"错误!输入的文件不存在."
elif [ -f $file ]
    then
	    echo	"$file是一个普通文件"
elif [ -d $file ]
    then
	    echo	"$file是一个目录"
else
	    echo	"$file是其他类型文件"
fi

4.case条件语句

多分支case条件语句

case  $变量名  in 
    “值1”) 
        如果$变量等于值1,则执行程序1 
    ;; 
    “值2”) 
        如果$变量等于值2,则执行程序2 
    ;; 
        ....省略... 
    *) 
        如果$变量的值不是以上值,则执行此程序 
    ;; 
esac 

4.1举例:创建启动脚本,让service命令管理apache

[root@xiaopeng htdocs]# vim /etc/init.d/apached
#!/bin/bash
# chkconfig: 2345 64 36         
# description: A very fast and reliable SQL database engine
httpd=/usr/local/apache2/bin/apachectl
case $1 in
start)
        $httpd start
        ;;
stop)
        $httpd stop
        ;;
restart)
        $0 stop                 
        sleep 0.05              
        $0 start
        ;;
configtest)                     
$httpd  -t
;;
*)
        echo "usage:$0 start|stop|restart|configtest."
        ;;
esac

4.2举例:创建启动脚本,让service命令管理nginx

[root@xiaopeng conf]# vim  /etc/init.d/nginx
#!/bin/bash
#Author:liu
#chkconfig: 2345 99 33
#description: nginx server control tools

ngxc="/usr/local/nginx/sbin/nginx"
ngxc_fpm="/usr/local/php/sbin/php-fpm"
case "$1" in
    start)
        $ngxc -t &> /dev/null
        if [ $? -eq 0 ];then
                $ngxc
                $ngxc_fpm
                echo "nginx service start success!"
        else
                $ngxc -t
        fi
        ;;
    stop)
        $ngxc  -s  stop
        killall  php-fpm
        echo "nginx service stop success!"
        ;;
    restart)
        $0 stop
        $0 start
        ;;
    reload)
        $ngxc -t &> /dev/null
        if [ $? -eq 0 ];then
               $ngxc  -s  reload
                pkill  -HUP  php-fpm
                echo "reload nginx config success!"
        else
                $ngxc -t
        fi
        ;;
    *)
        echo "please input stop|start|restart|reload."
        exit 1
esac

喜欢的请来个三连支持一下吧,谢谢谢谢!!!

您的支持是我最大的动力!!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/157585.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 面向对象和面向过程的区别理解_c是面向对象还是面向过程

    面向对象和面向过程的区别理解_c是面向对象还是面向过程一、面向对象和面向过程面向对象面向过程编程是一种以过程为中心的编程思想,分析出解决问题的步骤,然后用函数把这些步骤一步一步实现。面向过程编程,数据和对数据的操作是分离的,函数本身只

    2022年8月16日
    3
  • 复录比低的计算机学校,这7所报录比低的实力院校,赶紧捡漏一波!

    复录比低的计算机学校,这7所报录比低的实力院校,赶紧捡漏一波!原标题:这7所报录比低的实力院校,赶紧捡漏一波!俗话说:考研选对专业和院校,就等于成功了一半。很多准考研er对如何选择适合自己的院校仍感到很焦虑,而报录比就是选择院校专业很重要的参与因素之一。报录比报录比是指报考人数和实际录取人数的比例,可以帮助考生了解院校报考人数、拟录取人数与实际录取人数之间的比例。如果报录比大于1,就说明报考的人数比录取的人数多;如果报录比小于1,就说明报考的人数比录取的人数…

    2022年6月9日
    55
  • 一套很好的.net控件radcontrols介绍

    一套很好的.net控件radcontrols介绍中文在线阅读器简介:最新的项目有一个是XPS的在线阅读器,这个项目可以说是一个典点的Silverlight商业项目应用,用户可以直接通过一个website查看一个xps文档,这个程序类似目前网站上常见的Flash阅读器,XPS是微软的第的文件格式,是与Adobe的PDF文件格式对立的新格式,而且直接被Office2007(Office12)和WindowsVista支持…

    2022年7月24日
    7
  • mysql表注释乱码[通俗易懂]

    mysql表注释乱码

    2022年2月10日
    38
  • html超链接位置怎么改,如何修改HTML超链接样式?

    html超链接位置怎么改,如何修改HTML超链接样式?在网页开发中,我们不免会用到超链接,将内容链接到原网页上。如果不对超链接进行设置,链接默认以固定样式显示,过于单一。那么我们要如何修改HTML中的超链接呢?这篇文章W3Cschool小编为大家介绍一下。我们都知道,超链接是用标签来显示的。如果我们需要修改样式,则需要通过CSS修改它的样式。标签的样式还分为四个类型,分别为未访问、已访问、鼠标滑过、点击。a:link:未被访问的链接a:v…

    2022年7月19日
    25
  • idea 2021.3.8 for mac激活 3月最新注册码

    idea 2021.3.8 for mac激活 3月最新注册码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    53

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号