shell编程第二部分 -------shell 编程高级技巧

 
高级编程学习轮廓
 
第一章 深入讨论 
 
 
awk
<<
 
 
第二章 shell工具
 
 
日志文件
trap捕捉信号
eval
logger
 
 
第三章 运行级别的脚本介绍
 
 
运行级别 
inittab
启动应用程序
 
第四章 几个脚本例子 
 
kill_processes.sh
cpdir.sh
menu.sh
 
~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
第一章  深入讨论
~~~~~~~~~~~~~~~~~~
awk
~~~~~~~~~~~~~~~~~~~~
条件操作符 awkif.sh
 
~   匹配正则表达
!~ 不匹配正则表达
 
~~~~~~~~~~~~~~~~~~~~~~
逻辑操作符
 
&&   and
||   or
!    not
 
~~~~~~~~~~~~~~~~~~~~~~~
例子:
#!/bin/bash
#awkif
echo "210-219 how many people access: `awk `{if ($1~/^21[0-9]/) print $0}` www.l
og|wc -l`"
 
 
#echo " "  打印“”之间的内容
# `awk         www.log `     过滤www.log文件内容。用` `表示之间的内容是 命令
# awk `{if     print     }` 命令格式  ` ` 表示之间为命令
#if (    )  print    if格式
#$1 表示匹配 www.log 文件中的第一列,列之间用  空格 区分
# ~ 表示匹配  ~/    /   匹配文件的一种格式
# ^21[0-9]    表示开头匹配210-210的数字
#print $0 表示 打印出前面匹配下来开头是210-219的这个行的全部内容($0)
#wc -l 打印出这些内容的行数
 
 
echo "execpt 210-219 how many people access: `awk '{if ($1!~/^21[0-9]/) print $0}
' www.log|wc -l`"
 
# !~  表示不匹配内容
 
echo "2004.7.7 how many people access: `awk '{if ($4~/^\[07\/Jul\/2004/) print $
0}' www.log|wc -l`"
 
# \/    \表示/符号没有特殊意义
 
echo "2004.7.7 /htm/free_call.php how many people access:`awk '{if ($4~/^\[07\/J
ul\/2004/) print $0}' www.log|awk `{if ($7=="/htm/free_call.php") print $0}`|wc
-l`"
~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
awk内置变量
 
 
NF 记录域的个数
NR 已读的记录数
ENVIRON 系统中环境变量的使用
 
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
例子:
 
 
awk -F '#' '{print NF,NR,ENVIRON ["USER"],$0}' grade.txt
#### -F ‘#’ 指以#作为队列的区分标志
 
 
~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
字符串函数
 
gsub(r,s) 在正整个$0中用s替代r
gsub(r,s,t) 在整个t中用s替代r
split(s,a,fs) 用fs上将s分成序列a
 
 
例如:
 
awk -F '#' '{if (gsub("#","||")) print $0}' grade.txt
 
awk -F '#' '{if (gsub("s","S",$2)) print $0}' grade.txt
#意思为grade.txt中的第二列,把s替换为S打印出来。
 
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
转义字符
 
 
\b   退格键
\t   tab键
\f   走纸换页
\ddd 八进制值
\n   新行
\c   任意其他特殊字符,例如\\为反斜杠符号
\r    回车键
 
 
例如:
 
awk -F '#' '{if (index($2,"s")),"\t",$2}' grade.txt
 
 
~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
printf修饰符
 
%c    ASCII字符
%d    整数
%f    浮点数
%e    浮点数,科学计数法
%f    新行
%o    八进制数
%s    字符串
%x    十六进制数
 
~~~~~~~~~~~~~~~~~~~~~~~
 
awk 数组
awk 'BEGIN {print split("as#qw#1234",array2,"#")}'
awk_array.sh
 
~~~~~~~~~~~~~~~~~~~~~~~~
 
 
 
 
 
 
 
shell编程到此暂时先告一段落,我下面学习的重点会放在cisco路由交换的配置上面。cisco路由交换之后是网络安全。在之后是shell编程。