[笔记]快乐的Linux命令行《二十五》编写第一个 Shell 脚本

94 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第26天,点击查看活动详情

前言

在前面的章节中,我们已经装备了一个命令行工具的武器库。虽然这些工具能够解决许多种计算问题,但是我们仍然局限于在命令行中手动地一个一个使用它们。难道不是很棒,如果我们能够让 shell 来完成更多的工作?我们可以的。

通过把我们的工具一起放置到我们自己设计的程序中,然后 shell 就会自己来执行这些复杂的任务序列。

通过编写 shell 脚本,我们让shell 来做这些事情。

一、编写第一个 Shell 脚本

1.1 什么是 Shell 脚本?

最简单的解释,一个 shell 脚本就是一个包含一系列命令的文件。shell 读取这个文件,然后 执行文件中的所有命令,就好像这些命令已经直接被输入到了命令行中一样。

Shell 有些独特,因为它不仅是一个功能强大的命令行接口, 也是一个脚本语言解释器。

我们将会看到,大多数能够在命令行中完成的任务也能够用脚本来实现,同样地,大多数能用脚本实现的操作也能够在命令行中完成。

虽然我们已经介绍了许多 shell 功能,但只是集中于那些经常直接在命令行中使用的功能。Shell 也提供了一些通常(但不总是)在编写程序时才使用的功能。

1.2 怎样编写一个 Shell 脚本

为了成功地创建和运行一个 shell 脚本,我们需要做三件事情:

  1. 编写一个脚本。 Shell 脚本就是普通的文本文件。所以我们需要一个文本编辑器来书写 它们。最好的文本编辑器都会支持语法高亮,这样我们就能够看到一个脚本关键字的彩 色编码视图。语法高亮会帮助我们查看某种常见错误。为了编写脚本文件,vim,gedit, kate,和许多其它编辑器都是不错的候选者。

  2. 使脚本文件可执行。 系统会相当挑剔不允许任何旧的文本文件被看作是一个程序,并且 有充分的理由! 所以我们需要设置脚本文件的权限来允许其可执行。

  3. 把脚本放置到 shell 能够找到的地方。 当没有指定可执行文件明确的路径名时,shell 会 自动地搜索某些目录,来查找此可执行文件。为了最大程度的方便,我们会把脚本放到 这些目录当中。

1.3 脚本文件格式

为了保持编程传统,我们将创建一个“hello world”程序来说明一个极端简单的脚本。所以 让我们启动我们的文本编辑器,然后输入以下脚本:

#!/bin/bash
# This is our first script.
echo 'Hello World!'

1.4 脚本文件位置

当设置了脚本权限之后,我们就能执行我们的脚本了:

[me@linuxbox ~]$ ./hello_world
Hello World!

为了能够运行此脚本,我们必须指定脚本文件明确的路径。如果我们没有那样做,我们会 得到这样的提示:

[me@linuxbox ~]$ hello_world
bash: hello_world: command not found

脚本文件的好去处

这个 ∼/bin 目录是存放为个人所用脚本的好地方。

如果我们编写了一个脚本,系统中的每个用户都可以使用它,那么这个脚本的传统位置是/usr/local/bin。

系统管理员使用的脚本经常放到/usr/local/sbin 目录下。

大多数情况下,本地支持的软件,不管是脚本还是编译过的程序,都应该放到/usr/local 目录下,而不是在/bin 或/usr/bin 目录下。

这些目录都是由 Linux 文件系统层次结构标准指定,只包含由 Linux 发行商所提供和维护的文件。

1.5 更多的格式技巧

严肃认真的脚本书写,一个关键目标是为了维护方便;也就是说,一个脚本可以轻松地被作者或其它用户修改,使它适应变化的需求。

使脚本容易阅读和理解是一种方便维护的方法。

长选项名称

我们学过的许多命令都以长短两种选项名称为特征。例如,这个 ls 命令有许多选项既可以

用短形式也可以用长形式来表示。

缩进和行继续符

当雇佣长命令的时候,通过把命令在几个文本行中展开,可以提高命令的可读性。

总结

在这脚本编写的第一章中,我们已经看过怎样编写脚本,怎样让它们在我们的系统中轻松地执行。

我们也知道了怎样使用各种格式技巧来提高脚本的可读性(可维护性)。

在以后的各章中,轻松维护会作为编写好脚本的中心法则一次又一次地出现。