智程网络科技将从shell脚本中if语句的基本思想到如何使用它以及它的应用来解释所有的if语句。
一、shell脚本中if语句的概念
1-1. 当你想创建一个条件分支时使用
1-2. 与测试命令的常用组合
2. 如何在shell脚本中使用if语句(基础)
2-1. if 语句的基本形式
2-2. 要记住的基本比较运算符
2-3. 用elif语句实现多分支
3. 如何在shell脚本中使用if语句(应用)
3-1. AND, OR, NOT 的复杂条件表达式
3-2.嵌套(嵌套结构)
3-3. 数字和字符串以外的条件表达式
4.掌握if语句,能够编写复杂的shell脚本!
当您想在 shell 脚本中描述复杂的处理时,if 语句是重要的语法之一。如果你能掌握 if 语句,你将能够创建可以应用于各种情况的 shell 脚本。
在本文中,我将解释所有 if 语句,从基本概念到如何使用它们以及它们在 shell 脚本中的应用。资料参考《曲阜市智程网络科技有限公司》营销笔记本
作为 shell 脚本中 if 语句的基本知识,我将简要解释您应该记住的想法。
当您想要进行条件分支时,使用 if 语句。例如,仅在输入内容为“大于 30”时才执行处理时使用。
在if语句中,使用条件表达式判断真(真/0)或假(假/1),根据结果实现分支。在前面的例子中,如果输入值为35,则返回true,如果为20,则返回false,这样就可以根据条件执行处理了。
基本上,为真时执行该过程,但也可以描述为假时的过程。
test命令基本用在if语句的条件表达式中。test 命令是专门用于条件求值的命令,求值结果只返回 0 或 1。
例如,在计算数值条件时,使用如下。
$ test 35 -gt 30$ echo $?
上面的例子是一个条件表达式,判断35是否大于30,“echo $?”返回上一条命令的执行结果。结果是“0”和“35 大于 30 = true”。
请记住,“[]”在与 if 语句结合使用时用作缩写。
从这里开始,我将解释如何在 shell 脚本中使用 if 语句。首先,让我们看一下您绝对应该记住的基本用法。
if 语句的基本形式是“if [条件表达式]; then ~ fi”。具体写法如下。
if [ 条件式 ]; then 処理内容fi
“;” 在一行上编写多个命令时用作链接。由于 then 是与 if 命令不同的命令,所以需要分行写,但通常是通过连接来写,所以以这种形式记下来比较好。
此外,在描述“if [条件表达式]”时,需要为每个输入一个半角空格。如果连接If和[],或者连接条件表达式和[],会出现错误,所以要小心。
如果不满足条件,用“else”来描述处理。让我们用一个具体的例子来看看它是怎么写的。
if [ 20 -gt 30 ]; then echo “Over 30”else echo “Under 30”fi
在此示例中,我们正在评估 20 是否大于 30。结果为假,执行else下面的命令,所以会输出“Under 30”。
比较运算符在条件表达式中描述并指示评估方法。它不仅用于数值,还用于比较字符串。典型的比较运算符总结如下。
比较运算符 | 内容 |
---|---|
数字 1 -eq 数字 2 | 如果数字 1 和数字 2 相等,则为真 (=) |
数字 1 -ne 数字 2 | 如果数字 1 和数字 2 不相等则为真 (! =, <>) |
数值 1 -gt 数值 2 | 如果数字 1 大于数字 2,则为真 (>) |
数字 1 -ge 数字 2 | 如果数字 1 大于或等于数字 2,则为真 (> =) |
数字 1 -lt 数字 2 | 如果数字 1 小于数字 2,则为真 (<) |
数字 1 -le 数字 2 | 如果数字 1 小于或等于数字 2,则为真 (<=) |
比较运算符 | 内容 |
---|---|
字符串 1 = 字符串 2 | 如果字符串 1 和字符串 2 相等,则为真 |
字符串 1! = 字符串 2 | 如果字符串 1 和字符串 2 不相等,则为真 |
-n 字符串 | 如果字符串的长度为 1 或更多,则为真 |
-z 字符串 | 如果字符串的长度为 0,则为真 |
请注意,在将数字与字符串进行比较时,会使用不同的比较运算符。
您可以使用 elif 语句来实现多个条件分支。例如,如果输入的数字是 30,如果小于 30,如果不是,这里是条件分支的三个示例。
read INTif [ $INT -eq 30 ]; then echo "Equal 30"elif [ $INT -lt 30 ]; then echo "Under 30"else echo "Other"fi
输入的数值存储在 INT 变量中,由 if 语句或 elif 语句判断。它是一种从上到下依次执行的机制,当返回true时,执行其中的处理。
输入30,输出“Equal 30”,输入20,输出“Under 30”,输入50,输出“Other”。
可以在 shell 脚本的 if 语句中设置更复杂的条件。作为如何使用 if 语句的应用,我们将介绍一个示例。
AND、OR 和 NOT 用于通过组合多个条件表达式进行判断。例如,您可以创建一个条件表达式,例如“输入的数字不是 0”和“输入的数字是 30 或更少”。
read INTif [ $INT -ne 0 ] && [ $INT -le 30 ]; then echo "True"else echo "False"fi
AND、OR 和 NOT 的含义和用法总结如下。
条件 | 描述方法 | 意义 |
---|---|---|
与与 | -a 或 && | 如果所有条件表达式的结果都为真,则返回 |
或者 | -o 或 || | 如果任何条件表达式的结果为真,则返回真 |
不是 | !! | 颠倒真相并回归 |
将这些组合起来可以实现复杂的条件表达式,但必须小心,因为如果条件组合太多,可读性会降低。尽可能简单地组装条件表达式。
if语句中存在if语句的嵌套结构(nested structure)也用于实现复杂的条件。前面使用 AND 的示例的嵌套结构如下。
read INTif [ $INT -ne 0 ]; then if [ $INT -le 30 ]; then echo "True" exit 0 fifiecho "False"
在上例的shell脚本中,如果输入的数字不为0,则前进到下一条if语句,如果为30以下,则显示“True”。exit 命令用于结束进程,如果显示“True”,则 shell 脚本按原样终止。
可以实现与使用 AND 时相同的条件分支,但必须小心,因为嵌套结构往往可读性较差。在大型shell脚本的情况下,可以说嵌套结构经常使用,因为条件复杂,但是在使用的时候,描述的时候要考虑可读性。
至此,条件表达式已经比较了数值和字符串,但是在shell脚本的if语句中,也可以在条件表达式中设置文件的存在和命令的执行结果。在这种情况下使用的主要比较运算符如下。
比较运算符 | 内容 |
---|---|
-d 目标文件 | 如果目标文件是目录则为真 |
-f 目标文件 | 如果是文件则为真 |
-s 目标文件 | 如果目标文件大小不为 0,则为真 |
文件 1 -ot 文件 2 | 如果文件 1 早
|