要成功编写一个 shell 脚本,我们必须做三件事:
- 写一个脚本
- 授予 shell 执行它的权限
- 把它放在 shell 能找到的地方
编写脚本
shell 脚本是一个包含 ASCII 文本的文件。要创建一个 shell 脚本,我们使用文本编辑器。文本编辑器是一个程序,就像文字处理器一样,读取和写入 ASCII 文本文件。有很多很多的文本编辑器适用于 Linux 系统,适用于命令行和 GUI 环境。
以下是一些常见的列表:
文本编辑器名称 | 描述 | 界面 |
---|---|---|
vi, vim |
Unix 文本编辑器的鼻祖是 vi 。因其迟钝的用户界面而臭名昭著。从好的方面来说,vi 功能强大、效率高且速度快。 vi 是 Unix 的一种特别有用的编辑器,因为它是普遍的,在类 Unix 系统上可用。在大多数 Linux 发行版上,有一个增强的版本vim。也就是说linux提供了 vim 的 vi 版本来代替 vi。 vim 是一个了不起的编辑器,值得一试。 | 命令行 |
Emacs |
The true giant in the world of text editors is Emacs originally written by Richard Stallman. Emacs contains (or can be made to contain) every feature ever conceived of for a text editor. It should be noted that vi and Emacs fans fight bitter religious wars overwhich is better. |
命令行 |
nano |
nano 是随 pine 电子邮件程序提供的文本编辑器。 nano 非常易于使用,但与 vim 和 emacs 相比,功能非常匮乏。nano推荐用于需要命令行编辑器的新用户。 | 命令行 |
gedit |
gedit 是 GNOME 提供的桌面环境编辑器。 gedit 易于使用并包含足够的功能。是一个好的初学者级编辑器。
|
桌面环境编辑器 |
kwrite |
kwrite is the “advanced editor” suppliedwith KDE. It has syntax highlighting, a helpful feature for programmers and script writers. |
桌面环境编辑器 |
让我们启动我们的文本编辑器并输入我们的第一个脚本,如下所示:
#!/bin/bash
# My first script
echo "Hello World!"
聪明的读者会知道如何将文本复制并粘贴到文本编辑器中;-)
这是一个传统的“Hello World”程序。这个程序的形式出现在几乎介绍性的编程书中。我们将使用一些描述性名称保存文件。 hello_world 怎么样?
脚本的第一行很重要。它是一种特殊的结构,称为 shebang,用于指示系统将使用什么程序来解释脚本。在这种情况下,/bin/bash.其他脚本语言,如 Perl、awk、tcl、Tk 和 python 也使用这种机制。
第二行是注释。 bash 会忽略出现在“#”符号之后的所有内容。随着我们的脚本变得更大更复杂,注释变得至关重要。程序员使用它们来解释正在发生的事情,以便其他人可以弄清楚。最后一行是 echo 命令。这个命令只是在显示器上打印它的参数。
设置权限
接下来我们要做的是授予 shell 执行我们的权限脚本。这是通过 chmod 命令完成的,如下所示:
[me@linuxbox me]$ chmod 755 hello_world
“755”会给我们读、写和执行的权限。其他人将仅获得读取和执行权限。使脚本私有,(即,只有我们可以读取和执行),请改用“700”。
Shell 脚本的路径
如何运行该程序:
[me@linuxbox me]$ ./hello_world
我们应该看到“Hello World!”显示。
在我们进一步讨论之前,我们需要谈谈路径。当我们键入一个命令的名称,系统不会搜索整个计算机来查找在哪里该程序位于。那将需要很长时间。我们看到我们没有通常必须为我们要运行的程序指定一个完整的路径名,shell似乎知道。嗯,这是正确的。壳确实知道。
方法如下:shell 维护一个保存可执行文件(程序)的目录列表,并且仅搜索该列表中的目录。如果之后没有找到程序搜索列表中的每个目录,它会发出著名的命令未找到错误信息。
这个目录列表称为我们的路径。我们可以查看列表使用以下命令的目录:
[me@linuxbox me]$ echo $PATH
返回将被搜索的目录的冒号分隔列表,如果在输入命令时没有给出特定的路径名。在我们的第一个尝试执行我们的新脚本时,我们指定了文件的路径名(“./”)。
我们可以使用以下命令将目录添加到我们的路径中,其中directory 是我们要添加的目录的名称:
[me@linuxbox me]$ export PATH=$PATH:directory
更好的方法是编辑我们的 .bash_profile 文件以包含上面的命令。这样,每次我们登录时都会自动完成。
大多数 Linux 发行版鼓励这样一种做法,即每个用户都有一个他/她个人使用的程序的特定目录。这个目录为 bin 并且是我们主目录的子目录。如果我们还没有这样做,我们可以使用以下命令创建它:
[me@linuxbox me]$ mkdir ~/bin
如果我们将脚本移动到新的 bin 目录中,一切OK。现在我们只需要输入:
[me@linuxbox me]$ hello_world
我们的脚本将运行的很好。