LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 905|回复: 1

shell 编程求助

[复制链接]
发表于 2009-2-20 00:16:10 | 显示全部楼层 |阅读模式
编写 systemonitor.sh 程序,要求包括以下功能:
   1. 后台运行 ping localhost > datfile.dat 命令监视网络的联通情况,将结果保存到 datfile.dat 文件中;
   
   2. 监视 datfile.dat 文件,当它大于 100KB 时,将其按"datfile_开始时间_结束时间.dat"形式在当前目录重命名;
  
   3. 当所有被重命名后的.dat文件大小之和大于1MB字节时,将这些.dat文件打包压缩成.tar.gz格式,存放到当前目录下的archive子目录(命名形式:datfile_第一个dat文件的

开始时间_最后一个dat文件的结束时间.tar.gz),之后删除所有被打包的.dat文件(即打包后删除原文件);
   
   4. 完成上述任务后,结束所有由 systemonitor.sh 启动的进程;

   5.实现systemonitor.sh随系统启动而运行

我的思路
1.先写一个shell脚本,将ping的结果存进datfile.dat中

2,再分析这个脚本的大小,做后续操作

请教各位,谁有方法实这个shell
我认为第2点和第3点不好做,我刚接触shell编程

#/usr/bin/sh
#grad /etc/hosts and ping each address
cat /etc/hosts|grep -v '^#' | while read LINE
do
  ADDR=`echo $LINE|awk '{print $1}'`
  for MACHINE in $ADDR
  do
    ping $MACHINE > datfile.dat
  done
done

ls -l datfile.dat|grep >ds.txt
awk '$5/1000<100 {print $5}' ds.txt
这样能输出datfile的大小
发表于 2009-2-20 05:32:09 | 显示全部楼层
也来这边发发¬ ¬;;!


  1. #!/bin/bash
  2. date_start=`date +%Y%m%d%H%M%S`
  3. date_tar=`date +%Y%m%d%H%M%S`

  4. [[ -d ./archive ]] || mkdir archive


  5. file_size_test ()
  6. {
  7. if [[ `ls -l datfile.dat |awk '{print $5}'` -ge 102400 ]]
  8. then
  9.         mv datfile.dat datefile_"$date_start"_`date +%Y%m%d%H%M%S`.dat
  10.         date_start=`date +%Y%m%d%H%M%S`
  11.         return 0
  12. fi
  13. return 1

  14. }

  15. all_size_test ()
  16. {
  17. if [[ `ls -l *.dat | awk '{size+=$5}  END{print size}'` -ge 1024000 ]]
  18. then
  19.         tar czf archive/datfile_"$date_tar"_`date +%Y%m%d%H%M%S`.tar.gz *.dat
  20.         date_tar=`date +%Y%m%d%H%M%S`
  21.         rm -rf *.dat
  22. fi
  23. }

  24. while [ 0 ]
  25. do
  26.         ping -c 1 localhost >> datfile.dat
  27.         file_size_test
  28.         [[ $? == 0 ]] && all_size_test
  29. done

  30. exit 0
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表