Bash提供编程条件语句。条件为应用程序流提供决策点。例如,如果文件存在,则执行此操作,如果不执行其他操作,如逻辑操作。
if-else语法
猛击 if-else
语句可用于3种不同的情况。这里列出了它们的语法。
单箱检查
我们可以检查一个单一的案件或情况与 if .. then .. fi
.
if CASE then COMMANDSfi
- 我们将用不同的逻辑运算来检查这个例子,比如equal,greater then,same等等。如果这个例子是真的,我们将执行命令,如果不是,我们将不执行任何命令。
两箱检查
在两种情况下,我们将检查两种情况。如果第一个给定的情况是真的,我们将执行COMMANDS1,如果不是真的,我们将执行else COMMANDS2。
if CASE then COMMANDS1else COMMANDS2fi
多病例检查
在多个案例检查中,我们将检查案例。如果不正确,将检查案例2如果不正确,将检查案例3。我们可以用 elif
. 如果情况属实,则将执行其命令。如果所有的 if
和 elif
比最后一部分更假 else
命令n 将被执行。
if CASE then COMMANDS1 elif CASE2 COMMANDS2elif CASE3 COMMANDS3...else COMMANDSNfi
正如我们看到的,if语句有不同的语法类型。实际上,它们在逻辑上非常相似。我们将在下面详细介绍它们。
单一条件If
如果这种类型的语法非常简单,我们将只检查单个条件,然后执行所需的代码。
#!/bin/bash if true; then echo "TRUE"; fi;
这是一个非常简单的例子,首先我们看一行,如果它是真的,这意味着条件在下面得到满足,那么分支将被执行。然后分支打印 “正确” fi结束于分支。
与Else的两个条件
我们可以改进先前的if条件,如果第一个条件不满足,则添加一个条件。想想这是真是假。对于两种情况,有两个分支。
#!/bin/bash myvalue=false if $myvalue; then echo "TRUE"; else echo "FALSE"; fi;
多条件If
一般来说,会有不止一种情况。我们可以使用下面的多个elif语句指定多个条件。
#!/bin/bash age=12; if [ $age -ge 18 ]; then echo "Age is equal or greater than 18"; elif [ $age -ge 7 ]; then echo "Age is between 7 and 17" else echo "Age is below 7"; fi;
在这个例子中,我们有三种情况,其中第一个等于或大于18的if行。第二个是elif行,看起来等于或大于7。第三个是else语句,逻辑上低于7。
相关文章: Linux Bash Case语句及其示例
-ge
用作大于或等于运算。
方括号 [
, ]
用于将其中比较操作的结果输出到条件。
有关等于、大于等逻辑运算的更多信息,请参阅以下教程。
比较和检查运算符
在使用 if-else
我们通常需要使用比较和检查运算符来检查案例。它们可以用来检查一个文件是否存在或给定的数字是否大于另一个。在这里,我们将列出一些最有用的比较和检查运算符,可用于 if-else-elif
案例。
是的
true
是指定正数大小写的逻辑值。 true
将匹配案例 if-else-elif
.
true
假
false
是指定负大小写的逻辑值。 false
不匹配的情况下 if-else-elif
.
否定表达
使用时 if-elif-else
我们将使用逻辑正确和错误。我们可以通过在逻辑值前面加上 !
. 如果给定的值为真并以 !
这是假的。如果给定值为false并以 !
这是真的。
-
!true
等于假 -
!false
等于真值
字符串大于零
我们可以检查字符串的大小或字符数是否超过0个字符并且它不是空的。
-n STRING
字符串为零
我们可以检查字符串的大小或字符数 0个字符,为空。
-z STRING
STRING1等于STRING2
最常用的比较和检查运算符之一是检查两个给定字符串是否相等。我们可以用等号 =
就像下面一样。
STRING1 = STRING2
STRING1不等于STRING2
我们可以检查给定的STRING1是否不等于另一个具有 !=
.
STRING1 != STRING2
整数1等于整数2
另一个有用且流行的比较和检查操作是检查两个给定整数在数值上是否相等。我们可以用 -eq
操作员如下所示。
INTEGER1 -eq INTEGER2
整数1大于 整数2
另一个有用且流行的比较和检查操作是检查INTEGER1在数值上是否大于INTEGER2。我们可以用 -gt
操作员如下所示。
INTEGER1 -gt INTEGER2
整数1大于或等于 整数2
另一个有用且流行的比较和检查操作是检查INTEGER1在数值上是否大于或等于INTEGER2。我们可以用 -ge
操作员如下所示。
INTEGER1 -ge INTEGER2
整数1小于 整数2
另一个有用且流行的比较和检查操作是检查INTEGER1是否小于 整数2。我们可以用 -lt
操作员如下所示。
INTEGER1 -lt INTEGER2
整数1小于或等于 整数2
另一个有用且流行的比较和检查操作是检查INTEGER1在数值上是否小于或等于INTEGER2。我们可以用 -le
操作员如下所示。
INTEGER1 -le INTEGER2
文件存在并且是一个目录
我们还可以检查一些文件和目录属性。我们可以检查给定的文件是否是一个目录,是否与 -d
接线员。
-d FILE
文件已存在
我们只能检查给定的文件或目录是否存在 -e
操作员如下所示。
-e FILE
文件存在且大小大于零
我们可以检查给定的文件是否存在,其中是否有一些内容,这意味着它不是空的,并且大小大于零。
-s FILE
在单行中使用If-Else
在某些情况下,我们可能需要一些清晰度和可读性。所以我们应该使用 If Else
在一行中,这是有效的,只要我们遵守语法。如有其他类似情况,我们可以表达。我们应该意识到 if
, then
, else
和 fi
是很重要的。
#!/bin/bash myvalue=falseif $myvalue; then echo "TRUE"; else echo "FALSE"; fi;
如果不是,则嵌套
我们可能会遇到嵌套逻辑存在的复杂情况。我们可以用 If Else
以嵌套的方式来解决或处理这个问题。在这个例子中,我们首先检查 myvalue
变量是否为 True
或 False
. 如果这是真的,我们就进入嵌套 if-elif-else
. 如果不是真的,我们就执行 else
哪个指纹 FAILURE
. 如果这是真的,那么我们检查一下 myothervalue
不管是不是 1
。如果是1,则打印 OK
否则我们什么也不印。
#!/bin/bash myvalue=false myothervalue=1if $myvalue; then if $myothervalue -eq 1; then echo "OK" fi;else echo "FAILURE"; fi;
检查文件是否存在
我认为最想要的例子之一是检查文件是否存在,并根据结果执行代码。我们将使用 -a
运算符,用于检查文件夹是否存在,如果给定文件存在,则返回true。
#!/bin/bash if [ -a "/home" ]then echo "/home directory exists."fi
检查是否存在软链接
我们可以检查提供的文件是否存在以及符号链接。我们将使用 -h
用于检查给定文件的选项是否为软链接。
#!/bin/bash if [ -h "/bin/ping4" ]; then echo "/bin/ping4 exist and symbolic link"; fi;
比较数字,检查A是否低于B
另一个有用的if-else检查是比较数字。我们可以检查两个数字,看看A是小于还是等于B。
#!/bin/bash a=12 b=15 if [ $a -le $b ] then echo "$a is lower or equal to $b" fi
我们比较两个变量 $a
和 $b
具有 -le
意味着更低或相等。如果compare返回true,则将消息打印到控制台。
相关文章: Linux Bash Case语句及其示例
字符串比较
字符串变量也可以比较。例如,我们可能需要检查当前用户并比较它是否是root用户。
#!/bin/bash if [ "$(whoami)" != 'root' ]; then echo "You have no permission to run $0 as non-root user." exit 1; fi
我们使用 whoami
命令并比较它是否与 “根目录” 具有 !=
. 如果用户名与root不同,我们将向控制台打印一条消息。
检查是否定义了变量
检查脚本文件中是否设置了变量非常有用。
#!/bin/bash if [ -z ${HOME+x} ]; then echo "HOME is unset"; else echo "HOME is set to '$HOME'"; fi