今早物理课,老师讲题,到第三题顿了顿,有个哥们很自信的说:选C。老师一惊:这位同学你怎么知道的?天才啊,这道题绕了很多人。.....那哥们沾沾自喜中。......“这道题为什么选B而不是选C呢,下面我们来看一下”老师幽幽的说道.........
4匹配或者过滤操作
4.1 grep的使用
grep可以从输入的字符中,过滤某些或者过滤掉某个特定字符的命令。
一般使用为:
grep“特征字符串” inputFile
grep–v“特征字符串” inputFile
4.2 awk命令的使用
awk是可以使用很复杂,但是能完成某些特定功能,并且常使用的一个命令。使用用法:
awk [–F分隔符]‘模式’inputfile
-F可以指定域或者列之间的分割符,如果不指定,使用默认的分割符(空格或者TAB)。比如对于分割unload命令下载的文件, 可以指定–F |
对于模式中的使用分割符分割后的域,标记$1,$2 . . . $n,$0标识所有的域。
为打印一个域或所有域,使用p r i n t命令
比如打印当前目录的所有文件的大小名称:
>ls–al | awk‘{ print $5, $9}’ #大小与文件名称使用空格格开,即$5,$9使用空格连接
>ls–al | awk‘{ print $5”|”$9}’ #大小与文件名称使用|格开,即$5,$9使用|连接
使用BEGIN模式打印头部信息:
>ls–al | awk‘BEGIN {print“size filename”} { print $5”\t”$9}’ #相当于打印列的标题
使用END模式打印尾部信息:
>ls–al | awk‘{print $5”\t”$9} END{print“finished”}’ #在列出文件后,加上finished字符
awk中使用正则表达式
awk中正则表达式匹配操作用到的字符有:
\ ^ $ . [] | () * + ?
用法:
awk [-F分割符]‘{if (express)操作}’
即指定域满足express表达式的行,才打印出来.
如打印目录文件中包含sms的文件:
>ls–al | awk‘{if ( $9~/sms/) print $0}’
如打印目录文件大小大于100000字节的文件:
>ls–al | awk‘{if ( $5>100000) print $0}’
awk中还有很多用法,在此不列出来
4.3 sed命令
5信号处理
信号就是系统向脚本或命令发出的消息,告知它们某个事件的发生。这些事件通常是内存错误,访问权限问题或某个用户试图停止你的进程。信号实际上是一些数字。下表列出了最常用的信号及它们的含义列出所有信号:
>kill–l
HUP INT QUIT ILL TRAP IOT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM USR1
USR2 CLD PWR VTALRM PROF IO WINCH STOP TSTP CONT TTIN TTOU
一些信号的含义:
1 SIGHUP 挂起或父进程被杀死
2 SIGINT 来自键盘的中断信号,通常是< C T R L - C >
3 SIGQUIT 从键盘退出
9 SIGKILL 无条件终止
11 SIGSEGV段(内存)冲突
15 SIGTERM软件终止(缺省杀进程信号)
5.1发出信号:
kill–信号 进程号
注明:kill–9进程号 杀死进程时,操作系统直接将进程从内核清除,不作退出的处理
5.2检测信号或者捕捉信号
有些信号可以被应用程序或脚本捕获,并依据该信号采取相应的行动。另外一些信号不
能被捕获。例如,如果一个命令收到了信号9,就无法再捕捉其他信号。
当脚本捕捉到一个信号后,它可能会采
取下面三种操作之一:
1)不采取任何行动,由系统来进行处理。
2)捕获该信号,但忽略它。
3)捕获该信号,并采取相应的行动
如果需要捕捉信号后,采用自定义的操作,可以使用trap命令:
trap name signal(s)
其中,name是捕捉到信号以后所采取的一系列操作。实际生活中,name一般是一个专门用来处理所捕捉信号的函数。Name需要用双引号(“ ”)引起来。Signal就是待捕捉的信号。
下表列出了一些最常见的trap命令用法:
trap "" 2 3 忽略信号2和信号3,用户不能终止该脚本
trap"commands" 2 3如果捕捉到信号2或3,就执行相应的commands命令
trap 2 3 复位信号2和3,用户可以终止该脚本
如:收到3( SIGQUIT从键盘退出),打印一行“proc received SIGQUIT and exit”
#!/bin/ksh
trap“fun_exit”3
fun_exit()
{
echo“proc received SIGQUIT and exit”
exit 1
}
echo“start running”
exit 0
6eval命令
eval命名可以执行之后跟随的命令或者变量所赋的值或者表达式。比如:
用法1:
eval echo“aaa”
用法2:
command=env
eval $env
command=”echo aaa”
eval $command
用法3:
value=0
eval [ $? -gt $value ]&&j=1
eval [ $? -gt $value ]&& echo“successfully”
eval var=$#
eval命令在执行程序运行过程中赋值命令的变量非常有用。比如在SHELL编制的人机交互界面中,选中某个菜单项后执行没个命令或者函数,脚本本身不可能为每个菜单项case一遍。
零测试