天道酬勤,恒者能胜。追求卓越,成功就会在不经意间追上你。

Shell编程基础概念之SHELL常用命令与操作(八.2)

上一篇 / 下一篇  2012-12-31 12:28:53 / 精华(1) / 置顶(1) / 个人分类:Linux操作系统

今早物理课,老师讲题,到第三题顿了顿,有个哥们很自信的说:选C。老师一惊:这位同学你怎么知道的?天才啊,这道题绕了很多人。.....那哥们沾沾自喜中。......“这道题为什么选B而不是选C呢,下面我们来看一下”老师幽幽的说道.........



4匹配或者过滤操作

4.1 grep的使用

grep可以从输入的字符中,过滤某些或者过滤掉某个特定字符的命令。

一般使用为:

grep特征字符串 inputFile

grepv特征字符串 inputFile

 

4.2 awk命令的使用

awk是可以使用很复杂,但是能完成某些特定功能,并且常使用的一个命令。使用用法:

awk [F分隔符]模式inputfile

-F可以指定域或者列之间的分割符,如果不指定,使用默认的分割符(空格或者TAB)。比如对于分割unload命令下载的文件, 可以指定F |

对于模式中的使用分割符分割后的域,标记$1$2 . . . $n$0标识所有的域。

为打印一个域或所有域,使用p r i n t命令

比如打印当前目录的所有文件的大小名称:

>lsal | awk{ print $5, $9}  #大小与文件名称使用空格格开,即$5,$9使用空格连接

>lsal | awk{ print $5|$9} #大小与文件名称使用|格开,$5,$9使用|连接

使用BEGIN模式打印头部信息:

>lsal | awkBEGIN {printsize filename} { print $5\t$9} #相当于打印列的标题

使用END模式打印尾部信息:

>lsal | awk{print $5\t$9} END{printfinished} #在列出文件后,加上finished字符

 

awk中使用正则表达式

awk中正则表达式匹配操作用到的字符有:

\ ^ $ . [] | () * + ?

用法:

awk [-F分割符]{if (express)操作}

即指定域满足express表达式的行,才打印出来.

如打印目录文件中包含sms的文件:

>lsal | awk{if ( $9~/sms/) print $0}

如打印目录文件大小大于100000字节的文件:

>lsal | awk{if ( $5>100000) print $0}

 

awk中还有很多用法,在此不列出来

 

4.3 sed命令

 

5信号处理

信号就是系统向脚本或命令发出的消息,告知它们某个事件的发生。这些事件通常是内存错误,访问权限问题或某个用户试图停止你的进程。信号实际上是一些数字。下表列出了最常用的信号及它们的含义列出所有信号:

>killl

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信号 进程号

注明:kill9进程号 杀死进程时,操作系统直接将进程从内核清除,不作退出的处理

 

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如果捕捉到信号23,就执行相应的commands命令

trap 2 3          复位信号23,用户可以终止该脚本

 

如:收到3( SIGQUIT从键盘退出),打印一行“proc received SIGQUIT and exit

#!/bin/ksh

 

trapfun_exit3

 

fun_exit()

{

  echoproc received SIGQUIT and exit

  exit 1

}

 

echostart running

 

exit 0

 

6eval命令

eval命名可以执行之后跟随的命令或者变量所赋的值或者表达式。比如:

用法1

eval echoaaa

用法2

command=env

eval $env

command=echo aaa

eval $command

用法3:

value=0

eval [ $? -gt $value ]&&j=1

eval [ $? -gt $value ]&& echosuccessfully

eval var=$#

eval命令在执行程序运行过程中赋值命令的变量非常有用。比如在SHELL编制的人机交互界面中,选中某个菜单项后执行没个命令或者函数,脚本本身不可能为每个菜单项case一遍。

                     零测试


TAG: 零测试 BASH bash Bash command shell Shell 操作系统

 

评分:0

我来说两句

Open Toolbar