面向初学者的 Bash Shell 脚本(第 1 部分)

正如标题所暗示的那样,本文将介绍初学者级别的 Bash Shell 脚本。 我不打算回顾 Bash 的历史,但是有很多资源可以填写,或者您可以访问 GNU 项目: https://www.gnu.org/software/bash/. 我们将从了解一些非常基本的概念开始,然后开始将它们放在一起。

创建脚本文件

首先要做的是创建一个脚本文件。 首先确保主目录是当前目录。

cd ~

在主目录中,创建 example 文件。 可以将其命名为任何名称,但本文将使用 learnToScript.sh。

touch learnToScript.sh

从此时起,您的主目录中将有一个名为 learnToScript.sh 的文件。 通过键入以下内容验证它是否存在,并注意该文件的权限是 -rw-rw-r–。

ls -l
[zexcon@trinity ~]$ ls -l
total 7
drwxr-xr-x. 1 zexcon zexcon   90 Aug 30 13:08 Desktop
drwxr-xr-x. 1 zexcon zexcon   80 Sep 16 08:53 Documents
drwxr-xr-x. 1 zexcon zexcon 1222 Sep 16 08:53 Downloads
-rw-rw-r--. 1 zexcon zexcon   70 Sep 17 10:10 learnToScript.sh
drwxr-xr-x. 1 zexcon zexcon    0 Jul  7 16:04 Music
drwxr-xr-x. 1 zexcon zexcon  318 Sep 15 13:53 Pictures
drwxr-xr-x. 1 zexcon zexcon    0 Jul  7 16:04 Public
drwxr-xr-x. 1 zexcon zexcon    0 Jul  7 16:04 Videos
[zexcon@trinity ~]$ 

还有一件事需要做才能开始。 让我们尝试执行没有写入任何内容的脚本。 键入以下内容:

./learnToScript.sh
[zexcon ~]$ ./learnToScript.sh
bash: ./learnToScript.sh: Permission denied

您获得权限被拒绝,因为该文件没有执行权限。 您需要更改文件的权限才能执行脚本。 如果您不熟悉权限,我建议您阅读 Fedora Paul W. Frields 撰写的杂志文章:

命令行快速提示:权限

命令行快速提示:有关权限的更多信息

至此,您已经了解了权限,所以回到终端,让我们更改 learnToScript.sh 文件,使其能够执行。 键入以下内容以允许执行文件。

chmod 755 learnToScript.sh
[zexcon@trinity ~]$ ls -l
total 7
drwxr-xr-x. 1 zexcon zexcon   90 Aug 30 13:08 Desktop
drwxr-xr-x. 1 zexcon zexcon   80 Sep 16 08:53 Documents
drwxr-xr-x. 1 zexcon zexcon 1222 Sep 16 08:53 Downloads
-rwxr-xr-x. 1 zexcon zexcon   70 Sep 17 10:10 learnToScript.sh
drwxr-xr-x. 1 zexcon zexcon    0 Jul  7 16:04 Music
drwxr-xr-x. 1 zexcon zexcon  318 Sep 15 13:53 Pictures
drwxr-xr-x. 1 zexcon zexcon    0 Jul  7 16:04 Public
drwxr-xr-x. 1 zexcon zexcon    0 Jul  7 16:04 Videos
[zexcon@trinity ~]$ 

好的,现在您已准备好,您已对 learnToScript.sh 命令具有读取、写入和执行权限 (-rwxr-x rx)。

编辑脚本文件

花点时间确定您熟悉 vim 或任何文本编辑器。 在本文中,我将使用 vim。 在命令提示符处键入以下内容:

vim learnToScript.sh

这会将您带到一个包含一堆波浪号的空文本文件。 在键盘上输入 i ,这将使您进入 – INSERT – 模式。 通过查看终端窗口的左下方,您可以看到它处于此模式。 (请注意,另一种编辑器是 nano 编辑器。)

从这里您需要确保文件被正确的解释器识别。 所以输入shebang(#!)和你的目录 bash/bin/bash:

#!/bin/bash

您将在整篇文章中使用的最后一件事是保存文档。 按 Esc 退出输入模式,然后按 Shift + 冒号。 在冒号处,您将输入 wq。 一旦你按下回车,这将写入(w)文件并退出(q)vim。

使用 vim 时要记住的几件事,任何时候你想写入一个文档,你需要输入 i,你会在底部看到 -INSERT-。 任何时候要保存,都需要按 Esc 退出输入模式,然后 Shift+: 输入 w 写入文件或 Esc 然后 Shift+: 输入 q 退出而不保存。 或者将两个 wq 加在一起,它会写和 close. Esc 本身将退出 INSERT 模式。 你可以在这里找到更多关于 vim 的信息 网站 或这个 开始 地点。

让我们开始编写脚本……

回声

echo 命令用于向终端返回一些内容。 您会注意到您可以使用单引号、双引号或不使用引号。 那么让我们用一个传统的Hello World来看看吧!

#!/bin/bash

echo Hello World!
echo 'Hello World!'
echo "Hello World!"
[zexcon ~]$ ./learnToScript.sh
Hello World!
Hello World!
Hello World!
[zexcon ~]$ 

请注意,所有三个选项都会得到相同的结果。 情况并非总是如此,但在这个基本脚本中确实如此。 在某些情况下,报价的类型会有所不同。 顺便说一句,恭喜您编写了您的第一个 Bash 脚本。 让我们来看看在您继续创建更多脚本并让您的思绪发狂时您会想知道的一些事情。

命令替换 $( ) 或 ` `

命令替换允许您获取可能在命令行执行的命令的结果并将该结果写入变量。 为了 example 如果您在命令提示符下键入 ls,您将获得当前工作目录的列表。 所以让我们把它付诸实践。 您有两个命令替换选项。 请注意,第一个选项使用键盘左侧 Tab 键上方的反勾号。 它与波浪号 ~ 键配对。 第二个选项使用 shell 变量。

#!/bin/bash

command1=`ls`
echo $command1

command2=$(ls)
echo $command2
[zexcon ~]$ ./learnToScript.sh 
Desktop Documents Downloads learnToScript.sh Music Pictures Public snap Videos
Desktop Documents Downloads learnToScript.sh Music Pictures Public snap Videos
[zexcon ~]$ 

注意变量、等号和命令开头之间没有空格。 使用这两个选项,您会得到完全相同的结果。 请注意,变量需要以美元符号开头。 如果您忘记了并且回显了没有美元符号的命令变量,您将只看到命令的名称,如下所示 example.

#!/bin/bash

command1=`ls`
echo command1

command2=$(ls)
echo command2
[zexcon ~]$ ./learnToScript.sh 
command1
command2
[zexcon ~]$

双括号 (())

那么双括号有什么用呢? 双括号很简单,它们用于数学方程。

#!/bin/bash

echo $((5+3)) 
echo $((5-3)) 
echo $((5*3)) 
echo $((5/3)) 
[zexcon ~]$ ./learnToScript.sh 
8
2
15
1
[zexcon ~]$

结论

至此,我们已经创建了第一个脚本。 我们知道如何获取多个命令,将它们放在脚本中并运行它以获取结果。 我们将在下一篇文章中继续这个讨论,看看输入和输出的重定向、管道命令、使用双括号或者只是添加一些注释。