1. Bash 介绍
欢迎来到这个 Bash 基础训练指南!
从这个 Bash 基础训练课程,我们将学习 Bash 的基础知识,并能开始些我们自己的 Bash 脚本和自动化日常任务。
Bash 是一种Unix shell和命令语言。它可以在各种操作系统上广泛使用,而且它也是大多数Linux系统上的默认命令解释器。
Bash 是 Bourne-Again SHell 的简称。
与其他shell一样,我们可以在终端中交互式地直接使用 bash ,还可以像其他编程语言一样使用 bash 来编写脚本。
为了编写 Bash 脚本,我们只需要一个 UNIX 终端和一个文本编辑器(如 Sublime text 、VS Code )或基于终端的编辑器(如 vim 或 nano )。
2. Bash 文件结构
Bash 文件以 后缀为扩展名,我们通过创建一个 文件为例。
创建文件,我们可以使用 命令:
或者也可以使用终端自带的编辑器:
为了使用 bash shell 解释器执行/运行 bash 脚本文件,脚本文件的第一行必须指明到bash可执行文件的绝对路径:
这也被称为 。shebang所做的一切就是指示操作系统使用 可执行文件来运行脚本。
3. Bash Hello World
在创建了 test.sh 文件并在第一行指定了 bash shebang 之后,就可以开始创建第一个 Hello World bash脚本了。
为此,再次打开 test.sh 文件,并在 所在行之后添加如下代码:
然后,保存并退出。
之后,通过运行以下命令使脚本成为可执行文件:
再来就可以执行文件:
你会在屏幕上看到一个“Hello Wolrd!”的消息。
运行脚本的另一种方式是:
由于 bash 可以交互使用,所以直接运行以下的命令行和我们使用上面所操作的结果是一样的:
当我们必须将多个命令组合在一起时,将脚本组合在一起就非常有用。
4. Bash 变量
和其他编程一样,Bash也有变量。但是,变量在 bash 中不是数据类型,变量在 bash 中可以是容器编号和字符。
给变量赋值,使用 号赋值:
注意:重要的一点是, 符号前后不能有空格。
访问变量,必须使用 符号,如下使用 变量一样:
将变量名包装在花括号中不是必需的,但这被认为是一种很好的做法:
以上将输出: ,因为这是我们给变量 赋的值。
接下来,我们修改以下 脚本并引入一个变量。
再次用你习惯打开文件的方式打开脚本文件:
并且,将文件做如下修改
保存,退出并运行脚本:
我们将在屏幕上看到以下输出:
以下是该脚本的纲要:
- 首先指定我们的shebang
- 然后声明一个叫 的变量并给它赋值
- 最终,通过使用 输出包含变量值的文本内容。
5. Bash 用户输入
在前面的脚本中,我们定义了一个变量,并使用 在屏幕上输出该变量的值。
我们接着往下,这次接受用户的输入请求。修改 脚本如下:
上面的代码将提示用户输入,然后将用户输入的作为字符串/文本存储在变量中。
然后,我们可以使用该变量并向它们返回一条消息。
以上脚本的输出过程为:
首先运行脚本:
然后系统会提示您输入您的姓名:
一旦你输入了你的名字,只需按回车键:
为了减少代码,我们可以用 修改第一个 语句,带有 标志的 命令会在提示用户输入之前打印一条消息:
6. Bash 注释
与任何其他编程语言一样,我们可以向脚本添加注释。注释用于在代码中给自己留下注释。
要在bash中做到这一点,您需要在该行的开头添加 符号。注释永远不会呈现在屏幕上。
下面是一个评论的例子:
让我们继续向脚本添加一些注释:
7. Bash 参数
我们可以在执行shell脚本时将参数传递给它。要传递一个参数,只需要将它写在脚本名称之后。例如:
在脚本中,我们可以使用 来引用我们指定的第一个参数。
以此类推,如果我们传递第二个参数,它将以 的形式引用。
下面,我们创建一个名为 的脚本作为例子:
保存文件,使其可执行:
然后运行文件并传递3个参数:
得到的输入如下:
要引用所有参数,可以使用 :
如果你再次运行脚本:
将得到以下输出:
需要记住的另一件事是, 用于引用脚本本身。
如果需要的话,这是创建自销毁文件的好方法,或者只是获得脚本的名称。
例如,让我们创建一个脚本,它打印出文件的名称,然后删除后面的文件:
8. Bash 数组
如果你曾经做过任何编程,你可能已经熟悉数组。但为了防止你不是开发人员,与变量不同,数组可以在一个名称下保存多个值。
可以通过将值赋值给由。例子:
要访问数组中的元素,需要通过它们的数字索引来引用它们。
注意:请记住需要使用。
如下访问单个元素时,将输出::
如下将返回最后一个元素,输出::
如下将输出数组中元素的总数,将输出::
9. Bash 条件表达式
在计算机科学中,条件语句、条件表达式和条件结构是程序设计语言的特征,它们根据程序设计人员指定的布尔条件的值为真或假来执行不同的计算或操作。
在bash中, 复合命令和 内置命令使用条件表达式来测试文件属性并执行字符串和算术比较。
下面是最流行的bash条件表达式列表,您不必费力地记住它们,您可以简单地将此页面标记为书签,并在需要时返回到此列表!
文件表达式
如果文件存在,则为真:
如果文件存在并且是块特殊文件,则为真:
如果文件存在并且是字符特殊文件,则为真:
如果文件存在并且是一个目录,则为真:
如果文件存在,则为真:
如果文件存在且是常规文件,则为真:
如果文件存在且为符号链接,则为真:
如果文件存在且可读,则为真:
如果文件存在且文件大小大于0,则为真:
如果文件存在且可写,则为真:
如果文件存在且可执行,则为真:
如果文件存在且为符号链接,则为真:
字符串表达式
如果设置了shell变量(已经分配了一个值),则为真:
如果字符串的长度为0,则为真:
如果字符串的长度非零,则为真:
如果字符串相等,为真。 应该与POSIX一致性的测试命令一起使用。当与 命令一起使用时,它将执行上面描述的模式匹配(复合命令):
如果字符串不相等,为真:
如果string1在string2之前按字典顺序排序,则为真:
如果string1在string2之后按字典顺序排序,则为真:
算术运算符
如果两个数相等,则返回true:
如果数字不相等,则返回true:
如果arg1小于arg2,返回true
如果arg1小于或等于arg2,则返回true:
如果arg1大于arg2,返回true:
如果arg1大于或等于arg2,则返回true:
注意:arg1和arg2可以是正整数或负整数
与其他编程语言一样,我们也可以使用 、、、条件:
10. Bash 条件语句
在上一节中,我们介绍了一些最流行的条件表达式,现在我们可以将它们与标准的条件语句一起使用,比如和语句。
bash中if语句的格式如下:
然后,我们可以将它与上一节中的条件表达式组合在一起使用,如下示例所示:
我们可以将上面的if语句与前面章节中的所有条件表达式一起使用!
11. Bash 循环语句
与任何其他语言一样,循环非常有用。在bash中,您可以使用循环、循环和循环。
for 循环
如下是循环语句的结构:
例子:
我们也可以使用来处理一系列的数字,例如这里是一种从1到10的循环方法:
while 循环
循环的结构与循环非常相似:
例子:
我们来创建一个脚本,请求用户提供他们的名字,并且不允许空的输入:
现在,如果我们运行上面的操作,并且只按enter而不提供输入,那么循环将再次运行并一次又一次地询问我们的姓名,直到我们真正提供输入为止。
until 循环
和循环之间的区别在于,until 循环将在循环中先运行循环体,直到条件为真为止。
结构如下:
例子:
关键词:Continue 和 Break
与其他语言一样,我们也可以在bash脚本中使用和:
告诉bash脚本停止循环的当前迭代并开始下一个迭代
告诉bash脚本立即结束循环
12. Bash 函数
函数是重用代码的好方法。bash中的函数结构与大多数语言非常相似:
在开头省略function关键字,这也是可以的:
但为了可读性,最好还是加上关键词。
举一个“Hello World!”函数的例子:
注意:当调用这个函数时,我们不应该添加括号。
向函数传递参数的工作方式与向脚本传递参数的方式相同:
13. 调试 和 测试
为了调试bash脚本,可以在执行脚本时使用:
或者也可以在要调试的特定行之前添加, 是 启用shell的一种模式,在这种模式下,所有执行的命令都将打印到终端。
另一种测试脚本的方法是使用这个神奇的工具:
https://www.shellcheck.net/
只要复制并粘贴脚本到文本框,工具会给我们一些建议,可以用来改进我们的脚本。
我们也可以在终端直接运行这个工具,参考:
https://github.com/koalaman/shellcheck
14. 总结
到这里,我们就算完成了Bash基础的知识。
为了以后需要引用任何Bash知识时,请务必将此指南添加到你的书签中。
在本教程中,我们只介绍了基础知识,但是我们需要有足够的资源来开始编写一些厉害的脚本和自动化日常任务!
作为下一步,应该尝试编写自己的脚本,并且分享出来! 这是学习任何新的编程或脚本语言的最好方法!
领取专属 10元无门槛券
私享最新 技术干货