1 入门 Shell 脚本最常用于系统管理工作,或者用于结合现有的程序以完成小型、特定的工作。 脚本编程语言与编译型语言的差异 许多中、大型程序都是编译型语言,如Fortran、Ada、C、C++或者Java(有些特殊)。这类程序只要从源代码(Source Code)转换成目标代码(Object Code)便能直接通过计算机执行。这样的好处是高效,缺点是它们多半运行于底层,处理的是字节、数字或是机器层级的对象,很难进行“将一个目录里所有文件复制到另一个目录中”这类对文件的简单操作。 脚本语言通常是解释型(interpreted)的,由解释器(interpreter)读入程序代码,将其转换成内部形式。好处是它们多半运行在比编译型语言高的层次,能够轻易处理文件与目录之类的对象,缺点是效率不如编译型。但是编写更快,而且目前的速度也已经足够快,常用脚本语言有:awk、Perl、Python、Ruby 与Shell。Shell 的特点有: 1. 简单性 2. 可移植性 3. 开发容易 一个简单的脚本 who 命令可以知道系统有谁登陆,如果有很多用户在登陆,结果会很长,可以使用wc(字数统计)命令,算出行数(line)、字数(word)和字符数(character)。可以使用wc –l,只计算出行数 $ who | wc –l | 管道符号可以在两个命令之间建立管道(pipeline):who 的输出成为了 wc 的输入。下面就写一个 shell 脚本将管道转变成一个独立的命令。 其实在 Shell 中开发周期很类似,先直接在命令行上测试,之后写入到独立的脚本中。 第一行的# ! 当 Shell 执行一个程序时,要求 Unix 内核启动一个新的进程(process),在该进程里执行指定的程序。内核知道怎样为编译型程序执行,但 Shell 是解释型程序,当 Shell 要求内核执行时,内核无法执行,会回应”not executable format file”不是可执行的格式文件的错误信息。Shell 收到此错误信息时,就会确定不是编译型程序,是Shell 脚本,接着会启动一个新的/bin/sh 副本来执行该程序。 在当前有很多种 Shell,需要通过第一行#!来指定用哪个 Shell 来执行。一般如下: #! 解释器地址 选项 比如标准的Shell 脚本: #! /bin/sh 2 或者独立的 awk 程序: #! /bin/awk –f 这样就表示为是一个 awk 程序。 下面有些陷阱(gotchas)需要注意: 1. 系统对第一行#!长度是有限制的,从 63 到 1024 个字符不等,因此尽量不要超过 64 个字符 2. 别在选项之后放置任何空白,因为空白也会跟...