1.1 简介
诸多类UNIX操作系统的设计令人惊叹。即便是在数十年之后的今天,UNIX风格的操作系统架构仍是有史以来的最佳设计之一。这种架构最重要的一个特性就是命令行界面或shell。shell环境使得用户能与操作系统的核心功能进行交互。术语“脚本”更多涉及的是这类环境。编写脚本通常使用某种基于解释器的编程语言。而shell脚本不过就是一些文件,我们能将一系列需要执行的命令写入其中,然后通过shell来执行这些脚本。
本书使用Bash(Bourne Again Shell),它是目前大多数GNU/Linux系统默认的shell环境。由于GNU/Linux是基于UNIX风格架构的最杰出的操作系统,书中大部分案例和讨论都假定是在Linux系统环境下进行的。
本章的主要目的是让读者了解shell环境并熟悉shell的基本特性。命令都是在shell终端中输入并执行。打开终端后,就会出现一个提示符。其形式通常如下:
- username@hostname$
或者
- root@hostname#
要么就简单地以$
或#
表示。
$
表示普通用户,#
表示超级用户(root user)。超级用户是Linux系统中权限最高的用户。
shell脚本通常是一个以#!
起始的文本文件,如下所示:
#!/bin/bash
Linux环境下的任何脚本语言,都是以这样一个被称为shebang1的特殊行作为起始的。在这行中,字符#!
被置于解释器路径之前。/bin/bash是Bash的路径。
1 shebang这个词其实是两个字符名称的组合。在Unix的行话里,用sharp或hash(有时候是mesh)来称呼字符“#
”,用bang来称呼惊叹号“!
”,因而shebang合起来就代表了这两个字符。详情请参考:http://en.wikipedia.org/wiki/Shebang_(Unix))。——译者注(书中所有的注均为译者注。)
有两种运行脚本的方式。一种是将脚本作为sh
的命令行参数,另一种是将脚本作为具有执行权限的可执行文件。
将脚本作为命令行参数时的运行方式如下:
- $ sh script.sh # 假设脚本位于当前目录下
或者
- $ sh /home/path/script.sh # 使用script.sh的完整路径
如果将脚本作为sh
的命令行参数来运行,那么脚本中的shebang行也就没什么用处了。
为了使shell脚本能够自己独立运行,需要具备可执行权限。要使脚本独立运行,必须利用shebang行。它通过使用位于#!
之后的解释器来运行脚本。至于脚本的可执行权限,可以通过以下方式设置:
- $ chmod a+x script.sh
该命令赋予所有用户script.sh文件的可执行权限。这个脚本能以下列方式执行:
- $ ./script.sh #./ 表示当前目录
或者
- $ /home/path/script.sh # 使用脚本的完整路径
shell程序读取脚本的首行,查看shebang行是否为#!/bin/bash
。它会识别/bin/bash
,并在内部以如下命令行执行该脚本:
- $ /bin/bash script.sh
当打开一个终端的时候,该终端最初会执行一组命令来定义诸如提示文本、颜色等各类设置。这组命令来自位于用户home目录中的.bashrc脚本文件(~/.bashrc)。Bash还维护了一个历史记录文件~/.bash_history,用于保存用户运行过的命令。~
是一种简写,代表用户home目录的路径。
在Bash中,每个命令或是命令序列是通过使用分号或换行符来分隔的。比如:
- $ cmd1 ; cmd2
它等同于:
- $ cmd1
- $ cmd2
字符#
指明注释的开始。注释部分以#
为起始,一直延续到行尾。注释行通常用于为代码提供注释信息,或者注释掉某行代码,暂不执行。2
2 shell不执行脚本代码中的任何注释部分。
现在让我们继续。