电脑技术学习

对话 UNIX,第 6 部分: 通过脚本实现操作的自动化

dn001

  您可以使用脚本来自动化几乎所有个人或系统任务。脚本可以监视、存档、更新、上载、下载和转换数据。一个脚本可以只有单行或包括无数个子系统。任务无论大小,均可通过脚本来处理。实际上,如果您查看 /etc/init.d 目录,会看到在每次启动计算机时运行服务的各种 Shell 脚本。如果您创建了一个非常有用的脚本,您甚至可以将它部署为系统范围的实用程序。只需将其放到用户的 $PATH 上的某个目录中。

  让我们创建一个实用程序,以练习您新发现的诀窍。脚本 myrm 将替换系统自己的 rm 实用程序。与彻底删除某个文件不同,myrm 把要删除的文件复制到某个存档,对其进行唯一命名以便您以后能够找到它,然后再删除原始文件。myrm 脚本有效但是非常简单,并且您还可以添加许多杂项功能。您还可以编写一个广泛的 unrm(撤销删除)脚本作为配套实用程序。(您可以搜索 Internet 来找到各种各样的实现。)

  myrm 脚本如清单 5 所示。

  清单 5. 用于在从文件系统中删除文件之前备份该文件的简单实用程序

#! /bin/zsh
backupdir=$HOME/.tomb
systemrm=/bin/rm
if [[ -z $1 || $1 == "--help" ]]
then
 exec $systemrm
fi
if [[ ! -d $backupdir ]]
then
 mkdir -m 0700 $backupdir || echo "$0: Cannot create $backupdir"exit
fi
args$=$( getopt dfiPRrvw $* ) || exec $systemrm
count=0
flags = ""
foreach argument in $args
do
 case $argument in
  --) break;
    ;;
   *) flags="$flags $argument";
    (( count=$count + 1 ));
    ;;
 esac
done
shift $(( $count ))
for file
do
 [[ -e $file ]] || continue
 copyfile=$backupdir/$(basename $file).$(date "+%m.%d.%y.%H.%M.%S")
 /bin/cp -R $file $copyfile
done
exec $systemrm $=flags "$@"

标签: