Bash if语句
if语句在顺序执行代码语句的流程中执行条件性任务。根据设置的条件,判断是否运行一段代码语句。
基础
在if语句中,如果判断为true,则执行给定的代码语句进行相关操作。如果判断为false,则略过给定的代码语句不进行相关操作。 基本语法:
if [ expression ];
then
statements
fi
注: expression 是判断表达式。 statements 是给定的执行语句。
- 结合&&逻辑运算符使用多个条件:
if [ expression_1 ] && [ expression_2 ];
then
statements
fi
- 结合||逻辑运算符使用多个条件:
if [ expression_1 ] || [ expression_2 ];
then
statements
fi
- 同时使用&&和||逻辑运算符:
if [ expression_1 && expression_2 || expression_3 ];
then
statements
fi
示例:
#!/bin/bash
# TRUE && TRUE
if [ 8 -gt 6 ] && [ 10 -eq 10 ];
then
echo "Conditions are true"
fi
# TRUE && FALSE
if [ "mylife" == "mylife" ] && [ 3 -gt 10 ];
then
echo "Conditions are false"
fi
执行后得到以下结果:
Conditions are true
if 语句选项常用列表
选项 | 描述 |
---|---|
! EXPRESSION | 检查EXPRESSION是否为假。 |
-n STRING | 检查STRING的长度是否大于零。 |
-z STRING | 检查STRING的长度是否为零(即为空) |
STRING1 == STRING2 | 检查STRING1是否等于STRING2。 |
STRING1 != STRING2 | 检查STRING1是否不等于STRING2。 |
INTEGER1 -eq INTEGER2 | 检查INTEGER1在数值上是否等于INTEGER2。 |
INTEGER1 -gt INTEGER2 | 检查INTEGER1在数值上是否大于INTEGER2。 |
INTEGER1 -lt INTEGER2 | 检查INTEGER1在数值上是否小于INTEGER2。 |
-d FILE | 检查FILE是否存在并且它是一个目录。 |
-e FILE | 检查FILE是否存在。 |
-r FILE | 检查FILE是否存在,并授予读取权限。 |
-s FILE | 检查FILE是否存在并且其大小大于零(表示它不为空)。 |
-w FILE | 检查FILE是否存在并授予写权限。 |
-x FILE | 检查FILE是否存在并授予执行权限。 |
嵌套 if 语句
在 Bash 的实际运用中可能会需要多个 if 语句。这时可能就会出现在一个 if 语句中使用另一个 if 语句的情况,这被称为嵌套 if 语句。 示例:
#!/bin/bash
#Nested if statement
if [ $1 -gt 50 ]
then
echo "Number is greater than 50."
if (( $1 % 2 == 0 ))
then
echo "and it is an even number."
fi
fi
执行后得到以下结果:
Number is greater than 50.
and it is an even number.
Bash if-else语句
if-else语句同if用于在代码语句的顺序执行流程中执行条件任务。当判断为true,执行第一组给定的代码语句。当判断为false,执行另一组给定的代码语句。
基础
语法:
if [ condition ];
then
<if block commands>
else
<else block commands>
fi
注:
- condition 是条件语句。
- block commands 是给定的执行语句。
- 可以使用一组以逻辑运算符连接的一个或多个条件。
- 其他块命令包括一组在条件为false时执行的代码语句。
- 条件表达式后的分号 ;是必须的。
示例:
#!/bin/bash
#when the condition is true
if [ 10 -gt 3 ];
then
echo "10 is greater than 3."
else
echo "10 is not greater than 3."
fi
#when the condition is false
if [ 3 -gt 10 ];
then
echo "3 is greater than 10."
else
echo "3 is not greater than 10."
fi
执行后得到以下结果:
10 is greater than 3.
3 is not greater than 10.
单行编写
您可以在一行中编写完整的if-else语句以及命令。需要遵循以下规则:
- 在if和else的语句末尾使用**;**。
- 使用空格作为分隔符以此追加其他语句。
示例:
#!/bin/bash
read -p "Enter a value:" value
if [ $value -gt 9 ]; then echo "The value you typed is greater than 9."; else echo "The value you typed is not greater than 9."; fi
执行后得到以下结果:
Enter a value:3
The value you typed is not greater than 9.
嵌套语句
同if语句的嵌套一样,if-else语句也能够嵌套使用。如下示例:
#!/bin/bash
read -p "Enter a value:" value
if [ $value -gt 9 ];
then
if [ $value -lt 11 ];
then
echo "$value>9, $value<11"
else
echo "The value you typed is greater than 9."
fi
else echo"The value you typed is not greater than 9."
fi
执行后得到以下结果:
Enter a value:5
The value you typed is not greater than 9.
Bash else-if语句
else-if语句是if-else语句的补充。 else-if语句中有多个elif,每个elif都有一个布尔表达式。如果第一个if判定为false,则检查第二个if语句。
基础
语法:
if [ condition ];
then
<commands>
elif [ condition ];
then
<commands>
else
<commands>
fi
注:
同if-else一样,可以使用&&或||逻辑运算符来连接任意数量的条件。
当条件为true时执行命令集。若都为false,则执行 else···fi 内部的命令块。
示例:
#!/bin/bash
read -p "输入分数:" num
if [ $num -gt 90 ];
then
echo "你很优秀."
elif [ $num -lt 60 ];
then
echo "你该努力了."
else
echo "继续加油."
fi
分别以不同数字执行后得到以下结果:
- 输入100时,if的判断为true。
输入分数:100
你很优秀.
- 输入80时,判断都为false。
输入分数:80
继续加油.
- 输入59时,elif判断为true。
输入分数:59
你该努力了.
Bash case语句
case 语句通常用于简化具有多种不同选择的复杂条件语句,使 Bash 脚本更具可读性,并更易于维护。
基础
语法:
case expression in
pattern_1)
statements
;;
pattern_2)
statements
;;
pattern_3|pattern_4|pattern_5)
statements
;;
pattern-n)
statements
;;
*)
statements
;;
esac
注:
- 可以运用|分隔的多个模式运算符,运算符指示模式列表的终止。
- pattern) statements这样的模式语句被称为子句,须以;;终止。
- *用于定义默认情况下的最终模式。当用作最后一种匹配模式时,它作为默认匹配。
运作规则:
case 语句扩展表达式并尝试与每个包含的模式进行匹配。若找到匹配项,将执行与该项连接的语句直至;;结束。
若匹配项成功,case以最后执行的语句的退出状态终止。
若匹配项失败,case的退出状态为零。
若写入了默认的*模式,那么在匹配其他项失败后将执行它。
示例:
#!/bin/bash
echo "Which Operating System are you using?"
echo "Windows, Android, Chrome, Linux, Others?"
read -p "Type your OS Name:" OS
case $OS in
Windows|windows|window|win)
echo "That's common. You should try something new."
echo
;;
Android|android)
echo "This is my favorite. It has lots of applications."
echo
;;
Chrome|chrome)
echo "Cool!!! It's for pro users. Amazing Choice."
echo
;;
Linux|linux)
echo "You might be serious about security!!"
echo
;;
*)
echo "Sounds interesting. I will try that."
echo
;;
esac
执行后得到以下结果:
which Operating System are you using?
Windows, Android, Chrome, Linux, Others?
Type your OS Name:linux
You might be serious about security!!