shell脚本小结

Shell学习总结。

 

最近在学习shell,shell 做一些统计分析的工作。基本上是从0开始学起,所以遇到了很多的问题,有时候一个下午都找不到错误的地方。

今天做个总结,以后好作为备用。

第一个shell脚本

我的第一个shell脚本,实现的功能是输入一个包含站点的文件,然后从一个日志文件中抽取出包含这个站点的信息输出到另外一个文件,同时记录输出文件的行数。

 

难点: 从文件中读取一个站点的时候需要过滤掉末尾的换行符,使用的是:

LINENEW=`echo $LINE |sed 's//r//g'`

输出结果追加使用>>符号。

 

#!/bin/sh

 

if [ $# != 2 ]; then

   echo "please input 2 paremeter ,first is site ,the other one is log "

else

  SITES=$1

  LOGS=$2

fi

 

rm siteout.txt

 

while read LINE

do

  echo $LINE

  LINENEW=`echo $LINE |sed 's//r//g'`

 

 

  echo $LINENEW

  echo "************"

 

  ` rm  ./out/$LINENEW`

  `grep "$LINENEW" $LOGS > ./out/$LINENEW`

 

  ` echo $LINENEW  = >>siteout.txt  `

  `cat ./out/$LINENEW | wc -l >> siteout.txt `

done < $SITES

 

 

第二个脚本(sitetime.sh

读入需要统计站点的站点名,日期,开始时间,结束时间。

日期的格式是YYYY-MM-DD

时间的格式是 HH-MM-SS

 

然后在文件中抽取出满足条件的内容。

难点: 文件中日期的转换和比较

首先得到 小时,然后得到分,然后得到秒,

   HOURSB=`echo $TIMETMP|awk '{print $1}'`

   MINSB=`echo $TIMETMP|awk '{print $2}'`

   SECSB=`echo $TIMETMP|awk '{print $3}'`

 

然后通过计算:

 

   TIMEB1=`expr $HOURSB /* 3600 + $MINSB /* 60 + $SECSB`

得到这样一个时间,

 

再对文本中的时间进行计算,最后进行比较

 

难点:shellawk传参数

`awk  -v a=$DAYS '{ if ($4==a || $5==a)  print $0 }'  ../gao/*  > ./tmp1/$SITES$DAYS$TIMEB$TIMEE`

 

 

#!/bin/sh

 

if [ $# != 4 ]; then

   echo "please input 4 paremeter : site  day  timebegin  timeend "

else

  SITES=$1

  DAYS=$2

  TIMEB=$3

  TIMEE=$4

 

 

 

   TIMETMP=`echo $TIMEB|sed 's//:/ /g'`

  

#得到开始时间

   HOURSB=`echo $TIMETMP|awk '{print $1}'`

   MINSB=`echo $TIMETMP|awk '{print $2}'`

   SECSB=`echo $TIMETMP|awk '{print $3}'`

  

   echo  $TIMETMP

   echo $HOURSB

   echo  $MINSB

   echo  $SECSB

  

   TIMEB1=`expr $HOURSB /* 3600 + $MINSB /* 60 + $SECSB`

  

   echo  $TIMEB1

  

   #得到结束时间

   TIMETMP=`echo $TIMEE|sed 's//:/ /g'`

  

   echo $TIMETMP

 

   HOURSE=`echo $TIMETMP|awk '{print $1}'`

   MINSE=`echo $TIMETMP|awk '{print $2}'`

   SECSE=`echo $TIMETMP|awk '{print $3}'`

  

   TIMEE1=`expr $HOURSE /* 3600 + $MINSE /* 60 + $SECSE`

   echo $TIMEE1

fi

 

  echo "come to awk "

  

   #将满足一定数据的输出到文件,然后再抓取第二个参数,在输出到另一个文件

   `awk  -v a=$DAYS '{ if ($4==a || $5==a)  print $0 }'  ../gao/*  > ./tmp1/$SITES$DAYS$TIMEB$TIMEE`

 

  echo "come to grep "

   `grep "$SITES" ./tmp1/$SITES$DAYS$TIMEB$TIMEE > ./tmp/$SITES$DAYS$TIMEB$TIMEE`

 

 

 

  while read LINE

  do

  # echo $LINE

   #得到日期

   TIMETMP=`echo $LINE| awk '{print $6}'|sed 's//:/ /g'`

  

   echo $TIMETMP

   HOURS=`echo $TIMETMP|awk '{print $1}'`

   echo $HOURS

 

   MINS=`echo $TIMETMP|awk '{print $2}'`

   echo $MINS

 

   SECS=`echo $TIMETMP|awk '{print $3}'`

 

   echo $SECS

   TIMESNOW=`expr $HOURS /* 3600 + $MINS /* 60 + $SECS`

 

   echo $TIMESNOW

   #比较日期是否满足条件

   if [ "$TIMESNOW"  -le "$TIMEE1"  ] ; then

    

     if [ "$TIMESNOW"  -ge "$TIMEB1" ] ; then

     

     `echo $LINE >> ./out/$SITES$DAYS$TIMEB$TIMEE.txt `

     fi

    fi

  

done < ./tmp/$SITES$DAYS$TIMEB$TIMEE

 

#输出结果

   # `echo "$SITES  $DAYS  $TIMEB  $TIMEE   =  " >>./fout/$SITES$DAYS$TIMEB$TIMEE`

 

   OUTS=`cat  ./out/$SITES$DAYS$TIMEB$TIMEE.txt | wc -l `

   `echo "$SITES    $DAYS  $TIMEB  $TIMEE  = [  $OUTS  ]" >>./fout/$SITES`

   

   ` rm  ./tmp1/$SITES$DAYS$TIMEB$TIMEE`

   ` rm  ./tmp/$SITES$DAYS$TIMEB$TIMEE`

   `rm  ./out/$SITES$DAYS$TIMEB$TIMEE.txt`

 

 

第三个脚本(all.sh

针对文件中的每一行调用上面的脚本

 

 

#!/bin/sh

 

if [ $# -lt 1 ] ; then

 

    echo "usage :please input the file "

fi

 

FINENAME=$1

 

while read LINE

 

do

  echo $LINE

  SITE=`echo $LINE|awk '{print $1}'`

  DAY=`echo $LINE|awk '{print $2}'`

  TIMEB=`echo $LINE|awk '{print $3}'`

  TIMEE=`echo $LINE|awk '{print $4}'`

  

  echo "./sitetime.sh  $SITE $DAY  $TIMEB  $TIMEE"

  ./sitetime.sh  $SITE $DAY  $TIMEB  $TIMEE

 

 

done < $FINENAME

 

第四个脚本(runall.sh

根据模板生成每个站点的文件,然后依此调用all.sh来完成统计

 

难点:

Shell参数传递给sed:

  `sed  -e 's/3g.sina.com.cn/'"$LINENEW"'/g' siteneeds.txt > ./sitetemplate/$LINENEW`

 

 

#!/bin/sh

 

if [ $# -lt 1 ] ; then

 

    echo "usage :please input the file "

fi

 

FINENAME=$1

 

while read LINE

 

do

  echo $LINE

 

  LINENEW=`echo $LINE |sed 's//r//g'` 

  

  `sed  -e 's/3g.sina.com.cn/'"$LINENEW"'/g' siteneeds.txt > ./sitetemplate/$LINENEW`

 

  echo "run ........"

  ./all.sh  ./sitetemplate/$LINENEW

 

done < $FINENAME

 

 

乱哄哄的写了一堆,以后可以查看一下哦,

O(∩_∩)O~,我的记事本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值