#! /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. 许多脚本将在未提供参数时提供有帮助的消息
标签: