Shell 条件 if

1 基本结构if

语法

if 条件表达式 ;then
  语句块
fi

if用于判断条件是否成立,成立时执行相应的命令语句。如果不成立,则不执行。

等价写法

if 条件表达式
then
  语句块
fi

then换行,则前面的分号可以省略。

第1种写法节省位置,第2种写法更清晰。

示例代码

02if.sh

score=100
if [ $score -eq 100 ];then
  echo "满分。"
  echo "xiaobuteach.com"
fi

声明变量score并初始化为100,判断如果是100分则显示满分。

[ ]为test命令的等价写法,判断是否相等用 -eq,变量名需使用$标记。

img

条件成立,显示满分。

如果将score的值修改为90,则不会进行满分显示。

等价代码

if [ $score -eq 100 ]
then
  echo "满分。"
  echo "xiaobuteach.com"
fi

命令行输入变量值

read -p 提示内容 变量名

首先进行提示,然后会停留,我们输入的内容会写入变量。

示例

read -p "请输入分数:" score
if [ $score -eq 100 ]
then
    echo "满分。"
    echo "xiaobuteach.com"
fi

img

2 else

语法

if 条件表达式
then
   命令语句块1
else
   命令语句块2
fi

当条件表达式成立时,执行语句块1中的内容,否则执行语句块2中的内容。

示例代码

文件 02if-02else.sh

read -p "请输入分数:" score
 
if [ $score -eq 100 ];then
    echo "满分。"
    echo "xiaobuteach.com"
else
    echo "继续加油"
    echo "xiaobuteach.com"
fi

img

3 elif

语法

if 条件1
then
    语句块1
elif 条件2
then
    语句块2
…
else
    语句块n
fi

if与else中间还能嵌套多个elif then;最后的else部分可以省略。

条件1成立,执行语句块1;否则,如果条件2成立,执行语句块2;如果都不匹配,执行else中的语句块。

示例代码

09-if-04-elseif.bat,批处理文件内容如下。

read -p "请输入分数:" score

if [ $score -lt 60 ];then
    echo "不及格"
elif [ $score -lt 70 ];then
    echo "及格"
elif [ $score -lt 80 ];then
    echo "中"
elif [ $score -lt 90 ];then
    echo "良"
elif [ $score -lt 100 ];then
    echo "优"
elif [ $score -eq 100 ];then
    echo "满分。"
    echo "xiaobuteach.com"
else
    echo "牛逼"
    echo "xiaobuteach.com"
fi

img