PDF版 ePub版

# Shell if else 语句

if 语句通过关系运算符判断表达式的真假来决定执行哪个分支。Shell 有三种 if ... else 语句：

• if ... fi 语句；
• if ... else ... fi 语句；
• if ... elif ... else ... fi 语句。

## 1) if ... else 语句

if ... else 语句的语法：

if [ expression ]
then
Statement(s) to be executed if expression is true
fi

#!/bin/sh

a=10
b=20

if [ $a ==$b ]
then
echo "a is equal to b"
fi

if [ $a !=$b ]
then
echo "a is not equal to b"
fi

a is not equal to b

## 2) if ... else ... fi 语句

if ... else ... fi 语句的语法：

if [ expression ]
then
Statement(s) to be executed if expression is true
else
Statement(s) to be executed if expression is not true
fi

#!/bin/sh

a=10
b=20

if [ $a ==$b ]
then
echo "a is equal to b"
else
echo "a is not equal to b"
fi

a is not equal to b

## 3) if ... elif ... fi 语句

if ... elif ... fi 语句可以对多个条件进行判断，语法为：

if [ expression 1 ]
then
Statement(s) to be executed if expression 1 is true
elif [ expression 2 ]
then
Statement(s) to be executed if expression 2 is true
elif [ expression 3 ]
then
Statement(s) to be executed if expression 3 is true
else
Statement(s) to be executed if no expression is true
fi

#!/bin/sh

a=10
b=20

if [ $a ==$b ]
then
echo "a is equal to b"
elif [ $a -gt$b ]
then
echo "a is greater than b"
elif [ $a -lt$b ]
then
echo "a is less than b"
else
echo "None of the condition met"
fi

a is less than b

if ... else 语句也可以写成一行，以命令的方式来运行，像这样：

if test $[2*3] -eq$[1+5]; then echo 'The two numbers are equal!'; fi;

if ... else 语句也经常与 test 命令结合使用，如下所示：

num1=$[2*3] num2=$[1+5]
if test $[num1] -eq$[num2]
then
echo 'The two numbers are equal!'
else
echo 'The two numbers are not equal!'
fi

The two numbers are equal!

test 命令用于检查某个条件是否成立，与方括号([ ])类似。