给出这些解释之后,您现在应该能够详细分析该脚本了。下面让我们逐块地研究一下该代码:
第一个块设置整个脚本中使用的变量。
下一个块应该是非常熟悉的:它在未提供参数时打印用法信息。它为什么执行 (exec) 实际的 rm 实用程序呢?如果您将此脚本命名为“rm并将其放在 $PATH 中靠前的位置,则它就可以充当 /bin/rm 的替代者。该脚本的错误选项也是 /bin/rm 的错误选项,因此该脚本允许 /bin/rm 提供用法信息。
下一个块在备份目录不存在时创建该目录。如果 mkdir 失败,则该脚本终止并显示适当的错误消息。
下一个块查找位置参数列表中的 dash 参数。如果 getopt 成功,则 $args 具有一个选项列表。如果 getopt 失败,例如在它无法识别某个选项的时候,则它会打印错误消息,并且该脚本将退出并显示用法信息。
随后的块捕获一个字符串中旨在提供给 rm 的所有选项。当遇到特殊 getopt 选项 -- 时,选项收集过程停止。shift 从参数列表中删除所有已处理的参数,保留待处理的文件和目录列表。
从以 for file 开头的块复制每个文件和目录,以便在您自己的存档目录中保存它们。每个文件的目录被逐字 (-R) 复制到存档目录,并附带当前日期和时间作为后缀,以确保该副本是唯一的,并且不会改写以前存档的具有相同名称的条目。
最后,使用传递给该脚本的相同命令行选项来删除文件和目录。
然而,如果您碰巧需要刚才删除(意外删除?)的文件或目录,您可以在存档中查找原始副本。
向自动化进军
您使用 Unix 的时间越多,就越有可能创建脚本。脚本可以节省重新输入复杂的较长命令序列所需的时间和精力,并且还可以防止发生错误。Web 上充满了其他人已创建的用于许多目的的有用脚本。很快您也会发布自己的神奇脚本。
标签: