背景:最近因为工作需要,会从系统log日志中扒统计数据,为了赶时间匆忙手工扒了一遍,劳心费力。于是完事后想了想搞个shell命令出来,以后就省事了。
用到的基本命令
for循环(条件循环)
语法:
for((i=1; i<=10; i++))
{
echo $i
}
for循环(列表循环)
语法:
for m in 1 2 3 4
do
echo $m
done
echo输出重定向
语法:
echo [-n] aaa > logfile
echo [-n] bbb >> logfile
其中,-n参数控制行尾是否换行,如果希望两次输出在同一行的话,加-n参数
用'>'重定向默认是覆盖写入,会覆盖前面的内容;用'>>'重定向默认是追加方式
grep匹配查询
语法:
grep [选项]... PATTERN [FILE]...
在每个 FILE 或是标准输入中查找 PATTERN。
默认的 PATTERN 是一个基本正则表达式(缩写为 BRE)。
示例:
grep -i 'hello world' menu.h main.c
从menu.h和main.c两个文件中查询'hello world',忽略大小写匹配
管道命令
语法:
操作符"|"
管道就是在一个命令完成后,把经由前面一个指令传出的正确输出信息作为输入信息来处理
示例:
grep aa logfile.log|grep bb
从logfile.log中查询包含aa的结果,并从中再匹配包含bb的结果
wc统计命令
语法:
用法:wc [选项]... [文件]...
或:wc [选项]... --files0-from=F
Print newline, word, and byte counts for each FILE, and a total line if
more than one FILE is specified. With no FILE, or when FILE is -,
read standard input. A word is a non-zero-length sequence of characters
delimited by white space.
The options below may be used to select which counts are printed, always in
the following order: newline, word, character, byte, maximum line length.
-c, --bytes print the byte counts
-m, --chars print the character counts
-l, --lines print the newline counts
--files0-from=文件 从指定文件读取以NUL 终止的名称,如果该文件被
指定为"-"则从标准输入读文件名
-L, --max-line-length 显示最长行的长度
-w, --words 显示单词计数
--help 显示此帮助信息并退出
--version 显示版本信息并退出
示例:
grep aa logfile.log|wc -l 统计logfile.log中包含aa的行数
其他知识
$0, $1, $2
其中,$0
获取的是当前脚本名称,$1
获取输入的第一个参数,以此类推更全面的bash编程语法,可参考Advanced Bash-Scripting Guide