CTDP linux 程序员手册 (4.8) 一个管理和读文件的例子

 

一个管理和读文件的例子
#!/bin/bash
#
# printst     这个文件打印在"/var/spool/spooldata"目录中的所有子目录中的文件 
#               它循环遍历每一个子目录, 查找所有具有粘滞位的文件,如果有粘滞
#               位,这个文件将被发送到打印机,并且粘滞位被清除.
#               文件被发送到哪一个打印机,取决于目录名和配置文件
#
if [ -d /var/spool/spooldata ]; then             # 如果spool子目录存在
   for dfile in /var/spool/spooldata/*; do    # 遍历在spooldata内的所有文件
      if [ -d $dfile ]; then                          # 如果是一个子目录
         fname=${dfile#/var/spool/spooldata/} # 参数扩展获得不带路径的文件名
         # 根据子目录的名称从配置文件中得到打印机的名称
         prname=`grep -i ${fname} /usr/local/etc/spooldata.conf | cut -f2 -d" "` 
         for ifile in $dfile/*; do      # 遍历子目录中的所有文件
            if [ -k $ifile ]; then    # 如果这个文件带有粘滞位
               lpr -P$prname $ifile # 打印这个文件
               chmod -t $ifile          # 清除粘滞位
            fi
         done
      fi
   done
fi

将这个文件放到你得计划表中,每一分钟执行一次或者添加以下的语句:
while [ 1 ]
do
   sleep 60
   .
   .
done
注意这个文件当中的以下几点:
1.       在变量 prname 被设置的地方, 输出是带有 ` 而不是 ‘. 使用将不能工作!!! bash man 的关于参数扩展中有相应的文档. 也可以使用$(command) 
2.       参数扩展用于提取打印机的名称:
o        符号 $ 被用于参数扩展
o        符号 {}用于分割参数扩展
o        第一个字符串或变量是参数第二个是扩展元素
o        如果用 # 分离元素中的参数,元素当中不能匹配参数开始的部分将被保留.
o        如果使用 % ,元素当中不能匹配参数末尾的部分将被保留.
3.       如果你用DOS or windows编写这个文件, 请确认所有的回车符从这个脚本文件中都被去掉否则可能它不会正常运行. Linux 在文件当中不使用回车符并且许多带有回车符的程序都不能正常运行.
在目录 /var/spool,带有目录名的 spooldata.conf 配置文件的例子, 每一行的第二个参数是打印机的名称.
print1 lp1
print2 lp2
print3 lp3

原文:

翻译 CTDP linux 程序员手册 (4.8) 一个管理和读文件的例子

此条目发表在服务器分类目录,贴了, 标签。将固定链接加入收藏夹。

发表评论

邮箱地址不会被公开。 必填项已用*标注