shell脚本语言之if条件判断语句实例详解

目录
  • 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

总结

到此这篇关于shell脚本语言之if条件判断语句的文章就介绍到这了,更多相关shell脚本if条件判断语句内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Shell脚本中if条件判断的写法实例

    目录 前言 条件判断格式 if 语句 条件判断类型 按照文件权限进行判断 文件之间比较 整数之间比较 字符串的判断 多重条件判断 附:Shell if 判断语句参数 总结 前言 if…else… 可以说是我们在编程中最常见的条件判断语句了,那么在 Shell 中如何使用呢?如何判断两个数值相等?如何判断一个文件是否存在?跟随这篇文章,一起来学习吧! 条件判断格式 在 Shell 中有两种判断格式,分别如下: # 1. 第一种 test  条件判断式 # 2. 第二种,注意括号两端必须有空格 [

  • linux shell常用循环与判断语句(for,while,until,if)使用方法

    shell的循环主要有3种,for,while,until shell的分支判断主要有2种,if,case 一,for循环 #!/bin/bash for file in $(ls /tmp/test/mytest |grep sh) //for in格式是shell for的基本格式,根js的for in类似 do //循环开始你就把它当成{ echo $file done //循环结束你就把它当成} for ((i=0;i<10;i++)) //注意是双小括号,由于受其他语言的影响,很容易搞

  • Shell中if的基本语法和常见判断用法

    if, for, while几乎是所有编程语言的关键字,在Shell编程中也不例外,其中if是使用频率最高的,由于Shell编程中不存在对象(Object)的概念,因此在if的比较判断中主要是对字符串.数字的值进行比较判断的: 一. if的基本语法 1.if与[之间要有空格 2.[]与判断条件之间也必须有空格 3.]与;之间不能有空格 二. 对字符串的判断 1.if [ str1=str2 ];then fi #当两个字符串相同时返回真 2.if [ str1!=str2 ];then fi #

  • Linux shell脚本编程if语句的使用方法(条件判断)

    if 语句格式if  条件then Commandelse Commandfi        别忘了这个结尾If语句忘了结尾fitest.sh: line 14: syntax error: unexpected end of fi     if 的三种条件表达式 ifcommandthen if 函数then 命令执行成功,等于返回0 (比如grep ,找到匹配)执行失败,返回非0 (grep,没找到匹配)if [ expression_r_r_r  ]then    表达式结果为真,则返回0

  • linux shell脚本对未定义变量的判断以及if的用法详解

    环境 操作系统:win10 虚拟机:centos7 需求 因为公司有个脚本,是用于启动程序的,但是每次启动都要手动做如下两个操作: ①先查询之前的进程ID ②杀死之前的,在启动新了 时间长了弄得我很烦躁,所以就琢磨下,把上面的的操作一起整合到启动脚本里去. 最开始我是这么写的: #!/bin/bash echo "ggjob-search..." pid=`ps -ef|grep -w ggjob-search|grep -v grep|grep -v ggjob-search.sh|

  • Shell脚本IF条件判断和判断条件总结

    前言:       无论什么编程语言都离不开条件判断.SHELL也不例外. 复制代码 代码如下: if list then           do something here       elif list then           do another thing here       else          do something else here       fi EX1: 复制代码 代码如下: #!/bin/sh SYSTEM=`uname -s`    #获取操作系统类

  • linux shell中if的各种判断

    shell编程中使用到得if语句内判断参数 –b当file存在并且是块文件时返回真 -c当file存在并且是字符文件时返回真 -d当pathname存在并且是一个目录时返回真 -e当pathname指定的文件或目录存在时返回真 -f当file存在并且是正规文件时返回真 -g当由pathname指定的文件或目录存在并且设置了SGID位时返回为真 -h当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效 -k当由pathname指定的文件或目录存在并且设置了"粘滞"位时返回真

  • Linux shell条件判断if中的-a到-z的意思【推荐】

    [ -a FILE ] 如果 FILE 存在则为真. [ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真. [ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真. [ -d FILE ] 如果 FILE 存在且是一个目录则为真. [ -e FILE ] 如果 FILE 存在则为真. [ -f FILE ] 如果 FILE 存在且是一个普通文件则为真. [ -g FILE ] 如果 FILE 存在且已经设置了SGID则为真. [ -h FILE ] 如果 FILE

  • shell脚本语言之if条件判断语句实例详解

    目录 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后面跟符合条件之后执行的程序,可以放在[]之后,用;分隔.也可以换行写入, 就不需要“;”了. 比如:

  • es6中使用map简化复杂条件判断操作实例详解

    本文实例讲述了es6中使用map简化复杂条件判断操作.分享给大家供大家参考,具体如下: 复杂逻辑判断时需要写很多if/else,代码可读性较差,可以用es6新增的Map来简化代码 列举六种实例,逐步简化 /** * 按钮点击事件 * @param {number} status 活动状态:1 开团进行中 2 开团失败 3 商品售罄 4 开团成功 5 系统取消 */ const onButtonClick = (status) => { if (status == 1) { sendLog('pr

  • JavaScript中的条件判断语句使用详解

    在写一个程序,可能有一种情况,当你需要采用一个路径出给定两个路径.所以,需要使用条件语句,让程序来做出正确的决策和执行正确的行动. JavaScript支持其用于执行根据不同的条件不同的操作条件语句.在这里,我们将解释if..else语句. JavaScript支持if..else语句的形式如下: if 语句 if...else 语句 if...else if... 语句. if 语句: if语句是基本的控制语句,它允许JavaScript来作出决定,有条件地执行语句. 语法: if (expr

  • python不相等的两个字符串的 if 条件判断为True详解

    今天遇到一个非常基础的问题,结果搞了好久好久.....赶快写一篇博客记录一下: 本来两个不一样的字符串,在if 的条件判断中被判定为True,下面是错误的代码: test_str = 'happy' if test_str == 'good' or 'happy': #这样if判断永远是True,写法错误 print('aa') else: print('bbbb') 这是正确的代码: test_str = 'happy' if test_str == 'good' or test_str ==

  • JavaScript 条件判断使用技巧详解

    目录 引言 避免直接使用字符串作为条件 使用 Object 不符合预期,提前 return 使用 Map 配合 Object Map 也可以存储函数 尽量避免三目表达式和 switch 引言 本文花费很短的时间来介绍一下在 JavaScript 中如何编写更简单的条件判断,帮助你编写更简洁的代码和可读性更高的代码. 假如我们有一个颜色值转换十六进制编码的函数. function convertToHex(color) { if (typeof color === 'string') { if (

  • R语言对数据库进行操作的实例详解

    数据是关系数据库系统以规范化格式存储. 因此,要进行统计计算,我们将需要非常先进和复杂的Sql查询. 但R语言可以轻松地连接到许多关系数据库,如MySql,Oracle,Sql服务器等,并从它们获取记录作为数据框. 一旦数据在R语言环境中可用,它就变成正常的R语言数据集,并且可以使用所有强大的包和函数来操作或分析. 在本教程中,我们将使用MySql作为连接到R语言的参考数据库. RMySQL包 R语言有一个名为"RMySQL"的内置包,它提供与MySql数据库之间的本地连接. 您可以使

  • Shell执行/调用Java/Jar程序例子的实例详解

    Shell执行/调用Java/Jar程序例子的实例详解 前言: 最近要写一个独立的Java程序去监控Hadoop和Oozie,通过Shell去调用.写代码到现在也4年多了,貌似就从来没在生产环境中写过一个独立的Java程序,不是部署到Tomcat就是直接丢给Hadoop.于是参考Hadoop等开源环境,自己写了一个demo,并且可以通过Ant打包生成可运行的程序.所以这里有三步:Java程序,Shell,Ant      1.首先建立Java程序,由于是例子,所以这里很简单,只是输出传入参数的个

  • C语言中枚举与指针的实例详解

     C语言中枚举与指针的实例详解 总结一下, 定义枚举,用typedef enum关键字, 比如 typedef enum{Red,Green,Blue} Color3; 枚举到数值的转换,如果没有指定代表数值就是从0开始算, 比如 Color3 c=Red; printf("%d",c);会显示0, 除非指定 如typedef enum{Red=3,Green=5,Blue=10} Color3; 关于类型指针的定义, 定义的时候在变量名左边加*代表此变量只是一个空指针而已, 若需要赋

  • C语言模拟实现atoi函数的实例详解

    C语言模拟实现atoi函数的实例详解 atoi函数,主要功能是将一个字符串转变为整数,例如将"12345"–>12345.但在实现过程中,我们难免会因为考虑不够全面而漏掉比较重要的几点,今天就总结一下实现atoi函数需要注意的地方. 1.指针为NULL 2.字符串为空字符串 3.空白字符 4.正号与负号问题 5.溢出问题 6.异常字符处理 接下来看代码:(具体几种问题处理都在代码的注释中说明) #define _CRT_SECURE_NO_WARNINGS 1 #include

  • C语言数据结构之图的遍历实例详解

    C语言数据结构之图的遍历实例详解 输入一组顶点,建立无向图的邻接矩阵.输入一组顶点,建立有向图的邻接表.分别对无向图和有向图进行DFS(深度优先遍历)和BFS(广度优先遍历).写出深度优先遍历的递归和非递归算法.根据建立的有向图,判断该图是否是有向无环图,若是,则输出其一种拓扑有序序列. 实现代码: #include <stdio.h> #include <stdlib.h> #define MAX 20 typedef struct ArcNode{ int adjvex; st

随机推荐