玩转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


posted @ 2017-08-13 10:12  jzdwajue  阅读(396)  评论(0编辑  收藏  举报