假设您有一系列需要重复多次的 Linux 命令。您可以将命令编写一千遍并诅咒自己的命运,也可以在 Linux 上编写一个小而简单的 bash 脚本来自动执行这项繁琐的任务。本文介绍了什么是 bash 脚本、它们的优点以及如何在 Linux 上编写 bash 脚本。 
Linux 上的 Bash 脚本是什么
就像电影剧本让演员知道如何表演特定场景一样。类似地,Bash 脚本是一个包含一系列 Linux 命令的文件,这些命令在运行时就像在 shell 提示符中键入一样,从而实现工作流程的自动化。所有 bash 脚本都有 .sh 扩展名、“shebang 行” – #/bin/bash ,并且可以通过 shell 提示符直接运行。
换句话说,bash 脚本将特定任务需要单独运行的所有命令组合在一起。现在您已经知道 Linux 上的 bash 脚本是什么了,让我们来看看它的好处。 
在 Linux 上使用 Bash 脚本的优点
一般来说,Bash 脚本是一种功能强大且多功能的工具,已成为每个系统管理员、开发人员和高级用户的重要组成部分。使用 bash 脚本的主要优点是:
- 自动化:这可能是使用 bash 脚本最受欢迎的好处。 Bash 脚本允许您自动执行最繁琐和重复性的任务,从而减少工作量、节省时间并最大限度地减少错误。
- 灵活性:您可以创建自定义 bash 脚本来满足您的需求。您还可以集成外部应用程序和脚本以进一步简化您的工作流程。
- 可移植性:您可以编写 bash 脚本来执行特定任务,并且只要系统上安装了所需的依赖项,bash 脚本就可以在任何 Linux 发行版上运行。 Bash 脚本还可以在其他类 Unix 系统(例如 macOS)上使用,也可以通过 WSL 在 Windows 上使用。
- 集成:Bash 脚本可以与其他工具集成,例如数据库、API,甚至其他 bash 脚本,使用户能够充分利用第三方工具的潜力来完成复杂的任务。
- 易于编写:由于 Linux 用户已经熟悉的简单语法,Bash 脚本非常容易编写。您不需要任何特殊的工具或软件来创建 bash 脚本。这使您可以快速制作想法和新工具的原型。
- 低学习曲线:Bash 脚本的学习曲线相对较低,使其成为初学者和经验丰富的用户的理想选择。

Linux 的基本 Bash 脚本组件
如果环顾四周,几乎所有 bash 脚本都是由一些充当构建块的常见和基本组件组成。这些块为整个脚本添加了功能结构。
1. 舍邦 (#!)
所有 bash 脚本都以“shebang 行”开头,指定要使用的 Linux 解释器的路径。写法如下:
#!/bin/bash2.Bash脚本注释
即使注释在运行 bash 脚本时被解释器简单地忽略。这些仅用于向用户提供有关代码的附加信息。它还提高了整体代码的可读性。要注释 bash 脚本,只需在行首添加一个八角形 (#) 即可。
例如:
# This is a comment line3. 变量
bash 脚本中的变量对于在内存中临时存储不同类型的数据非常有用。要为 bash 脚本中的变量赋值,请使用以下语法:
<variable_name>=<value_to_store>例如,要将“John”存储在变量“name”中:
name="John"要访问存储在“name”变量中的值,只需在其前面添加“$”符号即可。
echo "Hello, $name"这里,存储在“name”变量中的值被插入到 echo 语句中,最终输出打印如下:
Hello, John4.回显命令
echo 命令是一个简单但有用的命令,用于将值显示为输出。使用 echo 命令打印的语法是:
echo <value_to_print>5. Bash 脚本中的 If-Else
根据不同的情况,您可能需要做出情境决定。在 bash 中,您可以使用if 、 then和else命令通过以下语法做出不同的决定:
if [ condition ]
then
# code to be executed if the condition is true
else
# code to be executed if the condition is false
fi
以下是可用于 bash 中的条件脚本的不同字符集。
| 字符集 | 解释 |
|---|---|
| && | 逻辑产品。用于比较两个条件,仅当两个条件都满足时才返回 true。 |
| -eq | 等于;用于检查两个值是否相等 |
| -嘿 | 不等于;检查一个值是否不等于另一个值 |
| -lt | 小于;用于检查第一个值是否小于第二个值 |
| -gt | 大于;检查第一个值是否大于第二个值 |
| -le | 小于或等于;检查第一个值是否小于或等于第二个值 |
| -ge | 大于或等于;检查第一个值是否大于或等于第二个值 |
例如,检查变量中的两个值是否相等:
if [ $a -eq $b ]
then
echo "Equal"
else
echo "Not Equal"
fi6. 循环
当一系列语句或命令需要重复多次时,使用循环。在 bash 脚本中,您可以根据循环需要使用“for 循环”或“while 循环”。
For循环
“For 循环”是一种循环结构,当您确切地知道一组语句需要重复或用于遍历列表多少次时使用。在 Linux bash 脚本中使用 for 循环的语法是:
for <loop_variable> in <sequence>
do
# commands to be executed for each item in the <sequence>
done
以下是上述语法的细分:
- <loop_variable>指向一个临时变量,该变量在每次迭代期间保存 <sequence> 的每一项。您可以为 <loop_variable> 选择任何名称。
- <sequence>包含 for 循环迭代的项目。您可以指定 <sequence>,如下所示:
- 数字范围:一系列均匀分布的数字。您可以使用以下语法生成范围:“{<start_number>
.. <结束号码>}”。 - 项目列表:您可以指定由空格分隔的显式项目列表,例如
item1 item2 item3。 - 命令输出:命令的输出也可以使用
$(<command>)等语法用作 <sequence> 。
- 数字范围:一系列均匀分布的数字。您可以使用以下语法生成范围:“{<start_number>
- do标记包含需要重复执行的语句的循环体的开始。
- “done”表示循环结束。
例如,要打印 1 到 5 之间的所有整数:
for i in {1..5}
do
echo "Number: $i"
doneWhile 循环
通常,当您不确切知道一组特定语句需要重复多少次时,会使用 while 循环。重复语句直到满足特定的设定条件。使用 while 循环的语法是:
while [ <test_condition> ]
do
# commands to be executed while the condition is true
done
上面的语法看起来像这样:
- <test_condition>指的是在每次迭代之前测试是否满足的条件。如果不再满足条件,则循环退出而不进入循环体。
- do标记包含需要重复执行的语句的循环体的开始。
- “done”表示循环结束。
例如,要打印 1 到 5 之间的所有整数:
i=1
while [ $i -le 5 ]
do
echo "$i"
i=$((i + 1))
done

如何在 Linux 上编写 Bash 脚本
现在您已经了解了 Linux 上 bash 脚本的基本构建块,让我们继续讨论如何为 Linux 系统编写 bash 脚本。
第 1 步:创建一个新文件
您可以使用 Linux 上可用的任何主要文本编辑器创建新文件。确保脚本文件具有 .sh 扩展名。例如,在 nano 文本编辑器中创建名为“test.sh”的测试。
nano test.sh第 2 步:定义 Shebang 线
shebang 行定义用于运行 bash 脚本的解释器的路径。这是每个 bash 脚本的第一行,通常写为:
#!/bin/bash或者
#!/bin/sh如果您的脚本需要使用其他解释器,请使用以下语法:
#!/usr/bin/env <interpreter>注意:虽然没有必要为您创建的每个 bash 脚本添加注释,但添加注释可以提高代码的整体可读性。使用 octothorpe 符号向脚本添加注释。执行文件时,解释器将忽略所有注释。
第三步:添加命令和代码
现在,您可以使用 bash 组件添加所需的命令和说明,并将所有内容按逻辑组合在一起。假设您需要自动执行将一个目录中的所有 .txt 文件移动到另一个目录的过程。使用以下 bash 脚本将所有 .txt 文件移动到 Linux 系统上的另一个目录。
#!/bin/bash
# Create a directory to store text files
mkdir -p TextFiles
# Move all .txt files to the TextFiles directory
for file in *.txt
do
if [ -f "$file" ]; then
mv "$file" TextFiles/
echo "Moved: $file to TextFiles/"
fi
done
echo "File organization complete!"
是不是看起来很复杂?让我们把它分成几个部分:
-
#!/bin/bash是一个 shebang 行,指定脚本在 bash 解释器中运行。 -
# Create a directory to store text files,# Move all .txt files to the TextFiles directory。 -
mkdir -p TextFiles如果当前目录不存在,则在当前目录中创建一个名为“TextFile”的新目录。 -
for file in *.txt使用 for 循环遍历所有 .txt 文件。 - 表示
do循环的开始 if [ -f "$file" ]; then检查当前项目是否是常规文件- 如果满足上述条件,则通过
mv "$file" TextFiles/将当前文件移动到 TextFiles 目录中。 -
echo "Moved: $file to TextFiles/"在控制台上打印一条消息,指示文件已移至 TextFiles 目录
- 如果满足上述条件,则通过
fi,表示 if 块在当前迭代中已完成执行。-
done,表示 for 循环块已经执行完毕。 - 移动所有 txt 文件后,控制台上会显示最终消息
echo "File organization complete!"。
第 4 步:保存脚本
使用完 bash 脚本后,保存文件并退出编辑器。
第 5 步:使文件可执行
一般来说,并非所有脚本文件都可以由 Linux 上的所有类型的用户运行。要使 bash 脚本可执行,请使用以下命令:
chmod +x <filename>例如,要使文件 test.sh 可执行:
chmod +x test.sh第 6 步:运行文件
使 bash 脚本可执行后,使用以下语法运行该文件:
./<filename>运行 test.sh 文件:
./test.sh 




![2021 年如何设置 Raspberry Pi Web 服务器 [指南]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)

