Shell if 语句通过表达式与关系运算符判断表达式真假来决定执行哪个分支。有三种 if ... else 语句:
if ... fi 语句;
if ... else ... fi 语句; if ... elif ... else ... fi 语句。首先需要记住if和fi成对出现。先看一个简单脚本。
#表达式语句结构if <条件表达式> ;then指令fi#上下两条语句等价if <条件表达式> then指令fi#判断输入是否为yes,没有判断其他输入操作[root@promote ~]# cat testifv1.0.sh #!/bin/bashread -p "please input yes or no: " inputif [ $input == "yes" ] ;thenecho "yes"fi#请勿直接回车[root@promote ~]# bash testifv1.0.sh please input yes or no: yesyes[root@promote ~]# 条件表达式> 条件表达式>
if语句条件表达式为真时,执行后续语句,为假时,不执行任何操作;语句结束。单分支结构。
再看一个稍微复杂代码。
[root@promote ~]# cat testifv1.1.sh #!/bin/bashread -p "please input yes or no: " input ;if [ $input == "yes" -o $input == "y" ] thenecho "yes"fi[root@promote ~]# vim testifv1.2.sh [root@promote ~]# bash testifv1.2.sh please input yes or no: yyes[root@promote ~]# [root@promote ~]# bash testifv1.2.sh please input yes or no: n[root@promote ~]#
if else 语句是双分支结构。含有两个判断结构,判断条件是否满足任意条件,满足if then语句块直接执行语句,else执行另一个语句。语句结构类比单分支结构。
[root@promote ~]# cat testifv1.3.sh read -p "please input yes or no: " input ;if [ $input == "yes" -o $input == "y" ] thenecho "yes"else echo "no yes"fi[root@promote ~]# bash testifv1.3.sh please input yes or no: nno yes[root@promote ~]# bash testifv1.3.shplease input yes or no: yesyes[root@promote ~]#
需要注意else 无需判断,直接接语句。
if else语句判断条件更多,可以称为多分支结构。
[root@promote ~]# cat testifv1.4.sh#!/bin/bashread -p "please input yes or no: " inputif [ $input == "yes" -o $input == "y" ]thenecho "yes"elif [ $input == "no" -o $input == "n" ]thenecho "no"elseecho "not yes and no"fi[root@promote ~]# [root@promote ~]# bash testifv1.4.shplease input yes or no: yesyes[root@promote ~]# bash testifv1.4.shplease input yes or no: yyes[root@promote ~]# vim testifv1.4.sh[root@promote ~]# bash testifv1.4.shplease input yes or no: nono[root@promote ~]# bash testifv1.4.shplease input yes or no: nno[root@promote ~]# bash testifv1.4.shplease input yes or no: ssssnot yes and no
再看几个简单实例。
#判断是否为文件#!/bin/bash if [ -f /etc/hosts ] then echo "is file"fi#判断是否是root用户[root@promote ~]# cat isroot.sh#!/bin/bashif [ "$(whoami)"=="root" ]thenecho "root user"else"not root user"fi[root@promote ~]# bash isroot.shroot user