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编程。
转载于:https://blog.51cto.com/wugai/613680