• shell_判断语句If


    if 语句的结构

        在Sell脚本应用中,if语句是最为常用的一种流程控制方式.用来根据特定的条件测试结果分别执行不同的操作-如果......根据不同的复杂程度,if 语句的选择结构可以分为三种基本类型,适用于不同的应用场合:

    单分支的if语句

        if语句的“分支”指的是不同测试结果所对应的执行语句(一条或多条). 对于单分支的选择结构,只有在“条件成立”时才会执行相应的代码,否则不执行任何操作。

    单分支的if语句的语法格式如下:

    if 条件测试操作
    then
    	命令序列 
    fi

        在上述语句结构中,条件测试操作即【条件表达式】语句,也可以是其他可执行的命令语句;【命令序列】指的是一条或多条可执行的命令行,也包括嵌套使用if语句或其他流程控制语句。

        单分支if语句的执行流程:首先判断条件测试操作的结果,如果返回值为0,表达条件通过,则执行then后面的命令序列,一直到遇见fi结束判断为止,继续执行其他脚本代码;如果返回值不为0.则忽略then,忽略then后面的命令序列。直接调至fi行以后执行其他脚本代码。

    事例1:

    该脚本含义:查看该目录是否存在,不存在则新建。

    #!/bin/bash
    mount_dir="/media/cdrom"
    if [ ! -d $mount_dir ]
    then
            mkdir -p $mount_dir
    fi


    事例2:

    普通用户无法执行该脚本,root用户才可以执行。

    #!/bin/bash
    if [ "$USER" != "root" ]
    then
            echo "error:非root用户,权限不足"
            exit 1
    fi
    fdisk -l /dev/sda


    双分支的if语句:

        对于双分支的结构。要求针对条件成立“条件不成立两种情况分别执行不同的操作。

    语法格式:

    if 条件测试操作
    then
    命令序列1
    else
    命令序列2
    fi
     

       双分支if语句的执行流程:首先判断条件测试操作的结果,如果条件成立,则执行then后面的命令序列1忽略else及后面的命令序列2.直到遇见fi结束判断;如果条件不成立,则忽略then及后面的命令序列1.直接跳至else 后面的命令序列2并执行,直到遇见fi结束判断。

    事例1:

    通过位置参数$1来提供目标主机地址,然后根据ping命令监测结果给出相应的提示。

    #!/bin/bash
    HOST=192.168.152.1
    ping -c 3 $HOST &> /dev/null       监测是否能联通目标主机
    if [ $? -eq 0 ]                 判断前一条命令的返回状态
    then
        echo "host $HOST is up"
    else
        echo "host $HOST is down"
    fi

    事例2:

    检查mysqld服务是否运行,如果已经运行则列出其监听地址,PID号。否则输出提示“警告:mysqld服务不可用”。

    #!/bin/bash
    /etc/init.d/mysqld status &> /dev/null
    if [ $? -eq 0 ]
    then
            echo "监听地址:$(netstat -anpt | grep mysqld | awk '{print $4}')"
            echo "进程号:$(pgrep -x mysqld)"
    else
            echo "警告:mysqld服务不可用"
    fi

    多分支if语句

        if语句的嵌套在编写Shell 脚本时并不常用,因为多重嵌套容易使程序结构变得复杂。当确实需要使用多分支程序结构时,采用case语句更加方便。

        多分支if语句的执行流程:首先判断条件测试操作1的结果,如果条件1成立,则执行命令序列1,然后跳至fi结束判断。如果条件1不成立,则继续判断条件2的结果,如果条件2成立,则继续执行命令序列2,然后跳至fi结束判断。。。。。。。如果所有条件都不满足,则执行else后面的命令序列n,直到fi结束判断。

    事例1:

    编写一个成绩脚本cheng.sh。根据输入的分数不同来区分优秀、合格、不合格三挡。

    #!/bin/bash
    read -p "输入分数(0-100):" GRADE
    if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]
    then
            echo "$GRADE 分,优秀"
    elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]
    then
            echo "$GRADE分,合格"
    else    
            echo "$GRADE分,不合格"
    fi

    事例2:

    判断文件类型:

    #!/bin/bash
    #本脚本用来检测文件类型
    read -ep "请输入要检测的文件路径:" file
    if [ ! –e $file ];then
        echo "文件不存在,请检查输入是否正确!"
    elif [ -L $file ];then
        echo "链接文件"
    elif [ -d $file ];then
        echo "目录"
    elif [ -f $file ];then
        echo "普通文件"
    else
        echo "其他文件类型"
    fi
  • 相关阅读:
    xml中DTD关键字说明
    xml学习笔记
    HTTP请求方法:GET和POST区别
    三种方法从键盘输入
    crontab定时器
    收藏一篇关于Asp.net Response.Filter的文章
    MethodImplOptions.Synchronized的一点讨论
    需要知道关于struct的一些事情
    Excel使用技巧总结
    HTTP协议中POST、GET、HEAD、PUT等请求方法以及一些常见错误
  • 原文地址:https://www.cnblogs.com/sunjianlin/p/13247116.html
Copyright © 2020-2023  润新知