分支判断 if else

时间:2024-11-21 08:48:18

分支判断 if else

  • 1. if 语句
  • 2. if else 语句
  • 3. if elif else 语句

1. if 语句

shell 中的if 语句有两种写法,它的语法格式为:

# 第一种写法: 当 if 和 then 位于同一行的时候,这个分号是必须的,否则会有语法错误。
#且 ; , then 之间都要有空格 
if condition ; then
# 程序块儿
fi

# 第二中写法: 不需要写; 要注意缩进
if condition
then
#程序块儿
fi
  • condition是判断条件,如果 condition 成立(返回“真”),那么 then 后边的语句将会被执行;如果 condition 不成立(返回“假”),那么不会执行任何语句。
  • 从本质上讲,if 检测的是命令的退出状态。

例1
比较两个数字的大小

#!/bin/bash

read a
read b

if (( $a == $b ))
then
    echo "a和b相等"
fi
(())是一种数学计算命令,它除了可以进行最基本的加减乘除运算,还可以进行大于、小于、等于等关系运算,
以及与、或、非逻辑运算。
当 a 和 b 相等时,(( $a == $b ))判断条件成立,进入 if,执行 then 后边的 echo 语句。

例2
if-else 的判断表达式为中括号[]

#!/bin/bash

read -p "请输入一个数字:" num

if [ $num -eq 20 ] ; then
echo "$num > 20"
elif [ $num -eq 100 ] ; then
echo "$num > 100"
else
echo "$num < 20"
fi

运行输出


请输入一个数字:1
1 < 20
[admin@localhost shell]$

例3
在判断条件中也可以使用逻辑运算符

#!/bin/bash

read age
read iq

if (( $age > 18 && $iq > 150 ))
then
    echo "成年人"
    echo "智商爆棚"
fi
  • &&就是逻辑“与”运算符,只有当&&两侧的判断条件都为“真”时,整个判断条件才为“真”。

  • then 后边有多条语句,也不需要用{ }包围起来,因为有 fi 收尾。

2. if else 语句

如果有两个分支,就可以使用 if else 语句,它的格式为:

# 第一种写法: 
if condition ; then
# 程序块儿一
else
# 程序块儿二
fi

# 第二种写法: 
if  condition
then
   statement1
else
   statement2
fi
  • 如果 condition 成立,那么 then 后边的 statement1 语句将会被执行;否则,执行 else 后边的 statement2 语句。

例4

#!/bin/bash

read a
read b

if (( $a == $b ))
then
    echo "a和b相等"
else
    echo "a和b不相等,输入错误"
fi

运行结果:

10
20
a 和 b 不相等,输入错误

例5
判断文件属性

#!/bin/bash

file="/var/www/testfile/"
if [ -r $file ]
then
   echo "文件可读"
else
   echo "文件不可读"
fi
if [ -w $file ]
then
   echo "文件可写"
else
   echo "文件不可写"
fi
if [ -x $file ]
then
   echo "文件可执行"
else
   echo "文件不可执行"
fi
if [ -f $file ]
then
   echo "文件为普通文件"
else
   echo "文件为特殊文件"
fi
if [ -d $file ]
then
   echo "文件是个目录"
else
   echo "文件不是个目录"
fi
if [ -s $file ]
then
   echo "文件不为空"
else
   echo "文件为空"
fi
if [ -e $file ]
then
   echo "文件存在"
else
   echo "文件不存在"
fi

3. if elif else 语句

Shell 支持任意数目的分支,当分支比较多时,可以使用 if elif else 结构,它的格式为:

# 第一种写法: 
if [ 条件判断表达式 ] ; then
# 程序块儿一
elif [ 条件判断表达式二 ] ; then
# 程序块儿二
else
# 程序块儿三
fi


# 第二种写法: 
if  condition1
then
   statement1
elif condition2
then
    statement2
elif condition3
then
    statement3
……
else
   statementn
fi
  • 注意,if 和 elif 后边都得跟着 then。

  • 整条语句的执行逻辑为:
    如果 condition1 成立,那么就执行 if 后边的 statement1;如果 condition1 不成立,那么继续执行 elif,判断 condition2。
    如果 condition2 成立,那么就执行 statement2;如果 condition2 不成立,那么继续执行后边的 elif,判断 condition3。
    如果 condition3 成立,那么就执行 statement3;如果 condition3 不成立,那么继续执行后边的 elif。
    如果所有的 if 和 elif 判断都不成立,就进入最后的 else,执行 statementn。

例6
输入一个整数,输出该整数对应的星期几的英文表示:

#!/bin/bash

printf "Input integer number: "
read num

if ((num==1)); then
    echo "Monday"
elif ((num==2)); then
    echo "Tuesday"
elif ((num==3)); then
    echo "Wednesday"
elif ((num==4)); then
    echo "Thursday"
elif ((num==5)); then
    echo "Friday"
elif ((num==6)); then
    echo "Saturday"
elif ((num==7)); then
    echo "Sunday"
else
    echo "error"
fi
#运行结果1:
Input integer number: 4
Thursday

#运行结果2:
Input integer number: 9
error