• 玩转Bash脚本:选择结构之if


    总第3篇

    几乎所有的编程语言中都有流程控制的概念,即顺序结构、选择结构和循环结构。

    选择结构也称分支结构,比如C类语言中的 ifswitch语句。

    if的条件

    前面我已经讲过了test表达式及其简化版 [  ] 运算符的使用,这些判断的语句即可作为if结构的条件。

    Bash shell中我们可以使用的任何能够有真假判断功能的命令(无论是内部命令,还是外部命令)都可以作为判断的条件。

    注意if和[ ]之间要有空格。if [ ... ]

    基本结构

    Bash中的if同样支持与if配对的else 和 else if的概念,只不过,else if在这里写法是 elif。

    if语句基本结构是这样:

    if <条件1>
    then
            语句1
    elif <条件2>
             语句2
    elif <条件...>
            语句...
    else
            语句n
    fi

    注意if语句中并无尖括号< >。用你的条件表达式来替换掉 <条件> 这部分。

    实际根据你的需要使用elif和else。因为Bash不同于C语言,他没有使用花括号来闭合一个作用域的写法。Bash的if语句闭合作用域使用的是 if 的“反语”——fi。

    这是个有趣的现象,之后我们还会见到类似的写法。

    关于 then,if的条件后面都需要加一个保留字then。你也可以把它们写作同一行,但是需要注意的是要用分号来分隔,这些bash解释器才知道then不是if条件的一部分。否则会报错。

    if <条件>;then

    写法举例

    test及 [  ]条件

    输入一个数字,并判断是否小于100

    #!/bin/bash
    read -p "请输入一个数字:" a
    if [ $a -lt 100 ]
    then
        echo "a<100"
    else
        echo "a>=100"
    fi
    
    判断当前目录下一个文件是否存在,若存在判断是否为目录文件。

    #!/bin/bash
    read -p "请输入一个文件名:" name
    if [ -e $name ]
    then
        echo -n "$name存在,"
        if [ -d $name ]
        then
            echo "并且是一个目录"
        else
            echo "但不是一个目录"
        fi
    else
        echo "$name不存在"
    fi
    
    

    其他命令作为条件

    判断当前环境中是否安装了某一命令。

    #!/bin/bash
    read -p "请输入一个命令:" var
    if which $var>/dev/null
    then
        echo "$var存在"
    else
        echo "$var不存在"
    fi
    
    这个脚本,我命名为var.sh,请看它的执行结果

    另外还有一点要注意。在c语言中,0为假,非0为真。而在Bash中正好相反。

    不信你就在终端执行一下,which pwd这个命令。然后再使用 echo $?看看这个命令的执行状态(或者理解为返回值)。

    可以发现,echo $?的结果是0。而执行了which delete这个命令,再使用echo $?可以发现它的输出是1。

    当然了,除了which以外还有许多内部或外部的命令可以和 if 结构组合使用,和外部命令的无缝集成是Bash以及其他Shell强大的基础。

    if与逻辑表达式

    与其他语言一样,Bash中的if同样可以和 与或非 组合使用。并且通过结合内部或外部的命令一起使用,能够达到其他语言达不到的效果。

    比如:

    if [ -e $filename ] && rm $filename
    then
        echo "$filaname 不存在!"
    fi


  • 相关阅读:
    jvm的方法栈在干什么
    时间段交集查询
    linux 设置静态ip配置
    elk 学习
    内网穿透 https:natapp.cn
    mysql当前时间,日期转换,日期格式化
    swaggerui api.docs
    linux java -jar 后台进程
    druid 数据源 sql控制台输出
    spring pointcut 表达式
  • 原文地址:https://www.cnblogs.com/unclejelly/p/4082051.html
Copyright © 2020-2023  润新知