下面是简介: 如果您曾经在资深 Unix?用户工作时站在他的背后注视屏幕 , 可能会对命令行上不断滚动的咒语般的奇怪内容感到相当迷惑 。如果您阅读过对话 UNIX 系列中以前的文章(请参见参考资料) , 那么至少所输入的某些诗一般的神秘内容——如波形符 (~)、管道 (|)、变量和重定向(< 和 >)——看起来是熟悉的 。您也许还会认出某些 UNIX 命令名称和组合 , 或者了解何时使用别名来作为某个命令组合的简写形式 。
尽管如此 , 还有其他命令组合可能是您无法理解的 , 因为资深的 UNIX 用户通常以 Shell 脚本 的形式收集一大堆小的、高度专门化的命令组合 , 以简化或自动化经常重复的任务 。与输入或重新输入(可能)复杂的命令来完成某个繁琐任务不同 , Shell 脚本可以自动化该工作 。
在对话 UNIX 系列(请参见参考资料)的第 6 部分中 , 您将学习如何编写 Shell 脚本和更多命令行诀窍 。
核心就是一个词:“自动化
有些 Shell 脚本完全就是反复运行同样的命令 , 并处理同样的一组文件 。例如 , 将您的整个主目录内容传播到三台远程计算机的 Z Shell 脚本可以像清单 1 一样简单 。
清单 1. 跨多台计算机同步主目录的简单 Shell 脚本
#! /bin/zsh
for each Machine (groucho chico harpo)
rsync -e ssh --times --perms --recursive --delete $HOME $machine:
end
若要将清单 1 用作 Shell 脚本 , 可以将上述内容保存到某个文件——例如 simpleprop.zsh——并运行 chmodx simpleprop.zsh 以使该文件成为可执行文件 。您可以通过输入 ./simpleprop.zsh 来运行该脚本 。
如果您想查看 Z Shell 如何展开每个命令 , 可以将 -x 选项添加到脚本的 #!(# 号-感叹号对通常称为 shuh-bang)行的结尾 , 如下所示:
#! /bin/zsh -x
该脚本对 groucho、chico 和 harpo 中的每一台计算机运行 rsync 命令 , 并将 $HOME 替换为您的主目录(例如 , /home/joe) , 将 $Machine 替换为计算机名称 。
如清单 1 所示 , 变量和诸如循环等脚本控制结构使脚本更容易编写和维护 。如果您想将第四台计算机(例如 zeppo)包括到计算机池中 , 只需将其添加到该列表 。如果您必须更改 rsync 命令 , 比如说添加另一个选项 , 则只需编辑一个实例 。与在传统编程中一样 , 您也应该努力避免在 Shell 脚本中进行剪切和粘贴 。
使用恰当的参数
其他 Shell 脚本需要参数 , 或要处理的对象——文件、目录、计算机名称——的动态列表 。例如 , 考虑清单 2 , 这是前一示例的变体 , 它允许您使用命令行来指定您想要与之同步的计算机 。
清单 2. 允许您指定要处理的计算机的清单 1 的变体
#! /bin/zsh
for each machine
rsync -e ssh --times --perms --recursive --delete $HOME $machine:
end
假设您将清单 2 保存在名为 synch.zsh 的文件中 , 您得按照 zsh synch.zsh moe larry curly 的形式调用该脚本 , 以将主目录复制到另外的计算机 larry 和 curly 。
foreach 行上缺少的列表并不是输入错误:如果您省略某个列表 , 则 foreach 结构将处理命令行上给出的参数列表 。命令行参数也称为位置参数 (positional parameter) , 因为某个参数在命令行上的位置通常在语义上非常重要 。
例如 , 如果您未 指定任何参数 , 则 清单 2 可以利用位置参数的存在性或非存在性来提供有帮助的用法信息 。增强的脚本如清单 3 所示 。
清单 3. 许多脚本将在未提供参数时提供有帮助的消息
#! /bin/zsh
if [[ -z $1 || $1 == "--help" ]]
then
echo "usage: $0 Machine [machine ...]
fi
foreach machine
rsync -e ssh --times --perms --recursive --delete $HOME $machine:
推荐阅读
- 提升UNIX中文件系统使用效率
- SCO UNIX基础讲座--第十一讲:TCP/IP 管理
- 什么是第二人格
- 基本配置及操作 SCO UNIX学习宝典
- SCOUNIX基础讲座--第八讲:监视进程管理
- Stty使用技巧一则
- SCO UNIX 5.0.4 DAT磁带机安装
- 初识夏新M350——外观第一感
- UNIX操作系统的版本与标准
- UNIX操作系统的历史
