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文件(即打包后删除原文件);
----------------------------------------------------------------------
代码: 全选
#!/bin/sh
user=$(ifconfig | grep "inet\ " | sed '2d' | cut -c23-35 )
allLength=0
num=0
st=0
while true
do
touch datfile.dat
startTime=$(date | cut -c31-38 | tr : _ )
if [ ${num} -eq 0 ]
then
st=${startTime}
fi
while [ $(du -k "datfile.dat") -le 100 ]
do
ping ${user} >> datfile.dat
#这个地方> 与>>算是个问题,我现在改过来,以防影响后面的人,用>>也是不行,情况一样
#我自己在终端上用 ping 192.*.*.* >> abc.dat 这个文件是有数据的,但是写到脚本里就不行了
#ping 这终端是一直运行着产生数据的,用ctrl+c结束运行,是不是这个特性导致的问题?
sleep 3
done
num=$(($num + 1))
endTime=$(date | cut -c31-38 | tr : _ )
rename=datfile_${startTime}_${endTime}.dat
mv datfile.dat $rename
#mv datfile.dat "datfile_${startTime}_${endTime}.dat"
allLength=$(($allLength +$(du -k $rename | sed 's/ .*$//')))
if [ $allLength -ge 1024 ]
then
tar -zcf datfile_${st}_${endTime}.tar.gz datfile_*_*.dat
rm -f datfile_*_*.dat
allLength=0
num=0
break;
fi
done &
现在出现的问题是 ping部分,,脚本运行后会在当前目录下产生数据文件(以时间保存.dat),但是文件是空的,没内容,这是为什么???
大家看看前面的要求,看我程序那里有问题???
谢谢大家!!!