什么是 Shell
Shell是一种具备特殊功能的程序,它是介于使用者和 UNIX/Linux 操作系统之核心程序(kernel)间的一个接口。为什么我们说 shell 是一种介于系统核心程序与使用者间的中介者呢?读过操作系统概论的读者们都知道操作系统是一个系统资源的管理者与分配者,当您有需求时,您得向系统提出;从操作系统的角度来看,它也必须防止使用者因为错误的操作而造成系统的伤害?众所周知,对计算机下命令得透过命令(command)或是程序(program);程序有编译器(compiler)将程序转为二进制代码,可是命令呢?其实shell 也是一支程序,它由输入设备读取命令,再将其转为计算机可以了解的机械码,然后执行它。
各种操作系统都有它自己的 shell,以 DOS 为例,它的 shell 就是 command.com 檔。如同 DOS 下有 NDOS,4DOS,DRDOS 等不同的命令解译程序可以取代标准的 command.com ,UNIX 下除了 Bourne shell(/bin/sh) 外还有 C shell(/bin/csh)、Korn shell(/bin/ksh)、Bourne again shell(/bin/bash)、Tenex C shell(tcsh) … 等其它的 shell。UNIX/Linux 将 shell 独立于核心程序之外,使得它就如同一般的应用程序,可以在不影响操作系统本身的情况下进行修改、更新版本或是添加新的功能。
$@等特定shell变量的含义
在shell脚本的实际编写中,有一些特殊的变量十分有用:
- $# 传递到脚本的参数个数
- $* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个
- $$ 脚本运行的当前进程ID号
- $! 后台运行的最后一个进程的进程ID号
- $@ 与$#相同,但是使用时加引号,并在引号中返回每个参数
- $- 显示shell使用的当前选项,与set命令功能相同
- $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
如何使程序的执行结果同时定向到屏幕和文件
program_name |tee logfile
这样程序执行期间的显示都记录到logfile同时显示到标准输出(屏幕)。