控制结构if(玩转Bash脚本:选择结构之if)

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

选择结构也称为分支结构,比如C类语言中的if和switch语句。

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

if与逻辑表达式

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

比如:

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

results matching ""

    No results matching ""