Bash条件语句使用教程介绍
Bash 脚本有助于在你的机器上自动执行任务。if elif else
bash 脚本中的语句允许创建条件案例和对特定代码结果的响应。该if
条件有助于在节目播放过程自动化决策过程。
Bash如何使用条件语句?本文解释了该if elif else
语句是什么,包括Bash条件语句用法示例和语法。
先决条件
- 一台装有 Linux 操作系统的机器。
- 访问命令行/终端。
- 访问像 Vi/Vim 这样的文本编辑器。
什么是 Bash if 语句?
在编程中,if
语句是一个条件表达式。但是,if
语句中测试的命令根据退出状态进行评估。所以:
- 如果命令成功完成,退出状态为0。
- 如果语句抛出错误,则退出状态是1到255之间的任意数字。
成功的零值和失败的任何非零值似乎违反直觉。在大多数其他编程语言中,零代表假,一(或更大)代表真。但是,在 bash 脚本中,UNIX 约定返回退出状态而不是真值,不应将两者混淆。
通过运行以下命令在终端中测试示例错误命令(1 大于 100):
test 1 -gt 100
使用echo 命令检查退出状态:
echo $?
测试返回一个退出代码1
,表示表达式失败。
同样,检查在终端中成功评估(1000 大于 100)的示例命令:
test 1000 -gt 100
打印退出状态以确认命令成功:
echo $?
测试返回一个退出代码0
,显示命令已完成且没有错误。
Bash if 语句使用示例
Bash如何使用条件语句?按照以下说明使用if
语句创建示例 bash 脚本。
1. 打开终端(CTRL + ALT + T)并创建一个示例脚本来测试 bashif
语句的工作方式:
vi test_script.sh
2. 在脚本中,添加以下几行:
echo -n "Please enter a whole number: "
read VAR
echo Your number is $VAR
if test $VAR -gt 100
then
echo "It's greater than 100"
fi
echo Bye!
脚本中的每一行都执行以下操作:
- 第 1-3 行提供了通过控制台输入数字的说明。该数字被读入一个调用
VAR
并打印的变量中。 - 第 4 行开始该
if
语句并在 ($VAR -gt 100
)之后检查命令的退出状态。 - 第 5-6 行表示只有在第 4 行中的语句成功完成(退出状态为 0)时才开始执行命令,这意味着我们输入了一个大于 100 的数字。
- 第 7 行表示
if
语句的结束。 - 第 8行在语句之外并按预期运行,无论
if
结果如何。
3.保存并关闭 Vim:
:wq
4. 接下来,使文件可执行:
chmod +x test_script.sh
5. 最后,运行脚本:
./test_script.sh
该脚本根据输入的数字输出不同的消息。多次运行脚本并测试其他数字以确认行为。
Bash条件语句使用教程:Bash if 语句语法
Bash如何使用条件语句?bash if
语句的基本语法是:
if <commands>
then
<commands>
fi
每个关键字都有特定的功能:
if
表示语句的开始。紧随其后的命令是应用退出状态检查的命令。then
仅当上一次审查成功完成时才执行命令。fi
关闭 if 语句。
将测试命令括在不同的括号中会导致if
语句的执行方法不同。下表提供了每个支架类型的简短描述和用例。
句法 | 这是什么 | 何时使用 |
---|---|---|
if ( <commands> ) | 在子进程中执行的子shell。 | 当命令影响当前 shell 或环境时。子shell 完成后,更改不会保留。 |
if (( <commands> )) | Bash 扩展。 | 用于算术运算和 C 风格的变量操作。 |
if [ <commands> ] | POSIX 内置,别名为test <commands> . | 比较数字并测试文件是否存在。 |
if [[ <commands> ]] | Bash 扩展,单方括号的高级版本。 | 匹配通配符模式的字符串。 |
下面是使用每个括号类型的示例 bash 脚本,并提供更深入的解释。
单括号语法
Bash条件语句用法示例:在 bash 脚本中使用单括号会创建一个子 shell。当与if
语句结合使用时,子进程在继续程序之前完成。在if
分析了退出状态,并采取相应的行动。
if
带有单括号语法的 bash语句如下所示:
if ( <commands> )
then
<commands>
fi
试试下面的例子,看看子流程如何与if
语句一起工作:
1. 使用Vim创建脚本:
vi single_parentheses.sh
2. 将以下代码行添加到脚本中:
outer_variable=Defined
echo Before if:
echo inner_variable = $inner_variable
echo outer_variable = $outer_variable
if (
echo Inside subshell:
inner_variable=Defined
echo inner_variable = $inner_variable
outer_variable=Changed
echo outer_variable = $outer_variable
)
then
echo After then:
echo inner_variable = $iner_variable
echo outer_variable = $outer_variable
fi
echo After fi:
echo inner_variable = $inner_variable
echo outer_variable = $outer_variable
该程序执行以下操作:
- 第 1 行创建了一个名为的变量
outer_variable
,我们在其中存储了一个字符串Defined
。 - 第 2-4行将变量打印到控制台。此时,里面
outer_variable
存储了一个字符串,而inner_variable
为空。 - 第 5 行开始
if
语句和一个子过程,由单括号分隔。 - 第 6-11 行在the 中存储一个字符串并将 the
inner_variable
更改outer_variable
为不同的字符串。这两个值都打印到控制台,子进程以退出代码结束。在这种情况下,子流程以退出代码成功结束0
。 - 第 12-16 行在子流程之后执行并打印变量值。但是,这些值会变回它们在
if
语句之前的状态。子流程仅在本地存储值,而不是全局存储值。 - 第 16-19 行在
then
子句中的命令之后运行。这些值在语句之外保持不变。
3. 保存脚本并关闭编辑器:
:wq
4. 使脚本可执行:
chmod +x single_parentheses.sh
5. 最后,运行示例以测试结果:
./single_parentheses.sh
随着程序的进行,输出会打印变量状态。
Bash条件语句使用教程:双括号语法
bashif
语句的双括号语法是:
if (( <commands> ))
then
<commands>
fi
bash 中的双括号结构允许:
- 算术评估。将变量定义为
a=$(( 1+1 ))
计算方程并设置a
为 2。 - C 风格的变量操作。例如,使用 增加变量
(( a++ ))
。
Bash如何使用条件语句?在if
语句中使用双括号语法时,计算的行为不同。假设表达式的计算结果为0
,则if
测试未通过。
注意:双括号类似于大多数其他编程语言,其中 0 为假,1 为真。
Bash条件语句用法示例:试试下面的例子来看看双括号是如何工作的:
1.在终端创建一个bash脚本:
vi double_parentheses.sh
2. 在double_parentheses.sh 中添加以下代码:
variable=-2
echo Before first if: $variable
if (( variable++ ))
then
echo Incremented ++ style: $variable
fi
echo After first if: $variable
if (( variable=variable+1 ))
then
echo Incremented arithmetically $variable
fi
echo After second if: $variable
脚本中的每个行号执行以下操作:
- 第 1 行定义了一个变量并将值设置为
-2
。 - 第 3-5 行增加双括号内的 C-style 值并检查该值。如果变量不为零,则 if 将向控制台打印一条消息。
- 第 8-10 行使用常规算术符号将变量加 1,如果变量不为零,则打印一条消息。
3. 保存脚本并关闭 Vim:
:wq
4. 修改脚本权限为可执行:
chmod +x double_parentheses.sh
5. 运行脚本查看结果:
./double_parentheses.sh
单括号语法
单括号是test
命令的另一个名称,是所有 shell 可用的标准 POSIX 实用程序。基本语法是:
if [ <commands> ]
then
<commands>
fi
if
本教程中提供的第一个 bash示例 ( test_script.sh ) 与替代语法同样适用:
echo -n "Please enter a whole number: "
read VAR
echo Your number is $VAR
if [ $VAR -gt 100 ]
then
echo "It's greater than 100"
fi
echo Bye!
运行脚本以确认输出是等效的。有关使用括号语法的完整文档和详细信息,请在实用程序上运行man 命令test
:
man test
双括号语法
if
如果不需要可移植性,bash脚本中的双括号语法是最好的选择。双括号优于单括号,包括许多高级选项。语法是:
if [[ <commands> ]]
then
<commands>
fi
试试下面的例子,看看通配符字符串匹配是如何在if
命令中工作的:
1. 创建一个名为double_brackets的 shell 脚本文件:
vi double_brackets.sh
2. Bash条件语句用法示例:添加以下代码:
if [[ $USER == k* ]]
then
echo Hello $USER
fi
echo Bye!
3. 脚本检查用户名的起始字母是否是k
,如果是则发送hello消息。保存并关闭脚本:
:wq
4. 使用chmod使文件可执行:
chmod +x double_brackets.sh
5. 运行程序:
./double_brackets.sh
其他类型的 Bash 条件语句
Bash如何使用条件语句?该if
语句仅执行一项条件检查。if
使用其他类型的 bash 条件修改以创建复杂的评估。
if else 语句
该if else
语句提供了一种方法来根据检查条件的输出定义不同的操作。基本语法是:
if <command>
then
<commands>
else
<commands>
fi
以下示例演示了if else
条件的工作原理:
1. 使用 Vim 创建一个新脚本:
vi if_else.sh
2. 在脚本中插入以下代码:
echo -n "Please enter a whole number: "
read VAR
echo Your number is $VAR
if [ $VAR -gt 100 ]
then
echo "It's greater than 100"
else
echo "It's less than 100"
fi
echo Bye!
该语句检查第4 行中的命令输出,并根据结果打印一条描述性消息:
- 如果输入的数字大于 100,则程序进入第 6 行并打印消息。
- 如果数字小于 100,则
else
子句(第 8 行)中的消息将打印到控制台。
3. 保存脚本并关闭 Vim:
:wq
4. 使脚本可执行:
chmod +x if_else.sh
5. 最后,多次运行脚本并测试各种值:
./if_else.sh
Bash条件语句使用教程:if elif 语句
该elif
条款与联合if else
声明中创建多个条件检查。这if elif
会创建一系列具有不同结果的检查。语法是:
if <command>
then
<commands>
elif <command>
then
<commands>
else
<commands>
fi
使用elif
以下命令创建脚本:
1. 创建一个名为elif的 shell 文件:
vi elif.sh
2. Bash条件语句用法示例:在elif.sh文件中,添加如下示例代码:
echo -n "Please enter a whole number: "
read VAR
echo Your number is $VAR
if [ $VAR -gt 100 ]
then
echo "It's greater than 100"
elif [ $VAR -lt 100 ]
then
echo "It's less than 100"
else
echo "It's exactly 100"
fi
echo Bye!
该示例elif
在第 7 行添加了一个检查,以查看输入的数字是否小于 100。如果第 4 行和第 7 行中的语句都失败,则程序跳转到 else 子句。
3. 保存并关闭文件:
:wq
4. 使elif.sh文件可执行:
chmod +x elif.sh
5. 多次运行脚本并检查不同数字的行为:
./elif.sh
添加多个elif
子句以分支语句以进行进一步详细检查。对于if
andelif
模式系列增长的实例,更好的选择是使用case
语句。
嵌套 if 语句
Bash如何使用条件语句?嵌套if
语句在if
. 具体来说,当一个命令通过第一个 if 检查时,它会通过一个新的检查来进一步过滤结果。语法是:
if <commands>
then
if <commands>
then
<commands>
fi
fi
嵌套 if 通常用于搜索多维数组。但是,尽量避免使用超过两个或三个嵌套if
语句以降低程序复杂性。当嵌套if
不断深入时,重新思考代码的逻辑。
Bash条件语句使用教程结论
按照本教程,你应该知道如何if elif else
在 bash 脚本和可用的不同语法中创建语句。接下来,查看如何实现 if 语句来检查 bash 中是否存在文件或目录。