马哥布置的作业,嘿嘿,经过4个多小时的不懈努力,终于搞定了,吼吼
写一个脚本analyzelog.sh,完成日志分析: 说明:此脚本可以接受选项(i,d,t,a),使用格式:analyzelog <-i IP|-d DATE|-t TYPE|-a> LOG_FILE : (1)当用户使用选项-i时,统计出LOG_FILE文件中指定IP地址的访问次数(通常每一行为一次); (2)当用户使用选项-d时,统计出LOG_FILE文件中指定日期(某一天,如:16/Feb/2012)内每个IP地址访问的次数;如: 192.168.0.1:33 192.168.0.195:17 ... (3)当用户使用选项-t时,统计出LOG_FILE文件中以后缀后指定类型的文件(如.png表示png格式的图片)被访问的次数; (4)当用户使用选项-a时,统计出LOG_FILE文件中每个IP地址访问的次数;
#!/bin/bash # Author: Honway.Liu # Date: 2012-03-02 # Description: ########################################### ########## Script Start ################# ########################################### #Part 1: Define some function ########################################### ACCESS_COUNT() { echo "The $OPTARG access count: `grep $OPTARG $FILENAME | wc -l`" } DATE_COUNT() { echo "The $OPTARG access count list:" cat $FILENAME | grep $OPTARG | cut -d' ' -f1 | sort | uniq -c | sort -n | awk -F ' ' '{print $2 ":\t"$1 }' } TYPE_COUNT() { T=`cat $FILENAME | cut -d' ' -f7 | grep ${OPTARG}$ | wc -l` echo "The $OPTARG access aount: $T" } ALL_IP_COUNT() { cat $FILENAME | cut -d' ' -f1 |sort|uniq -c| sort -n|awk -F ' ' '{print $2 ":\t"$1 }' } Usage() { cat <<EOF ####################################################### Usage :$0 <-i IPADDR|-d DATE|-t FILETYPE|-a> FILENAME" Accept date type: 01/Mar/2012 ####################################################### EOF } # Part 2: Please give a option else whill exit if [ $# -le 1 ]; then Usage exit fi ######################################################## # Part 3: Main script. while getopts ":i:d:t:a" OPT ; do shift $[$OPTIND-1] FILENAME=$1 if [ -z $FILENAME ]; then Usage exit 0 fi case $OPT in i) ACCESS_COUNT ;; d) DATE_COUNT ;; t) TYPE_COUNT ;; a) ALL_IP_COUNT ;; *) Usage ;; esac done