文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Shell学习18-深入讨论与shell工具

Shell学习18-深入讨论与shell工具

时间:2010-08-23  来源:soqsoq

Shell学习18-深入讨论与shell工具

2010.08

1.<<

该命令的一般形式为:

command <<word

t e x t

w o r d

这里再简要回顾一下< <的用法。当s h e l l看到< <的时候,它就会知道下一个词是一个分界符。在该分界符以后的内容都被当作输入,直到 s h e l l又看到该分界符(位于单独的一行)。这个分界符可以是你所定义的任何字符串。

可以使用< <来创建文件、显示文件列表、排序文件列表以及创建屏幕输入。

 

2.快速创建一个文件

可以使用这种方法快速创建一个文件,并向其中存入一些文本:

$ cat >> myfile <<NEWFILE

现在可以输入一些文本,结束时只要在新的一行键入 N E W F I L E即可,这样就创建了一个名为m y f i l e的文件,该文件中包含了一些文本。

如果打开了一个已经存在的文件,输入的内容会附加到该文件的末尾。

如果使用t a b键,注意,一些老版本的 s h e l l可能无法正确理解它的含义。为了解决这一问题,可以在< <之后加一个横杠-,就像下面这样:

cat >> myfile <<- NEWFILE

. . .

 

3. 使用date命令创建日志文件

为了改变日期和时间的显示格式,可以使用如下的命令:

date option + %format

使用加号‘+’可以设置当前日期和时间的显示格式。下面的例子将日期以日、月、年的格式显示:

$ date +%d%m%y

090699

下面是一些常用的日期格式:

$ date +%d-%m-%y

09-06-99

$ date +%A%e” “ %B” “%Y

Wednesday 9 June 1999

下面的命令可以使时间按照hh:mm的格式显示:

$date +%R

10:07

$ date +%A” “%R” “%p

Wednesday 10:09 AM

下面的命令可以显示完成的时间:

$date +%T

10:25:11

注意,如果希望在日期和时间的显示中包含空格,要使用双引号。

 

4. 信号

信 号            信 号 名                                  含 义

1                   S I G H U P                               挂起或父进程被杀死

2                   S I G I N T                                来自键盘的中断信号,通常是< C T R L - C >

3                   S I G Q U I T                                   从键盘退出

9                   S I G K I L L                              无条件终止

11                 S I G S E G V                            段(内存)冲突

1 5                S I G T E R M                           软件终止(缺省杀进程信号)

还有信号0,我们前面在创建. l o g o u t文件时已经遇到过。该信号为“退出 s h e l l”信号。为了发出信号0,只要从命令行键入e x i t,或在一个进程或命令行中使用< C T R L - D >即可。

发送信号可以使用如下的格式:

kill [-signal no:| signal name] process ID

使用k i l l命令时不带任何信号或名字意味着使用缺省的信号 1 5。

可以使用如下的命令列出所有的信号:

# kill –l

 

5. 杀死一个进程

例如:

kill -9 157

kill -s SIGKILL 157

在有些系统中,不必使用- s,例如:kill SIGKILL 157。

 

6. 检测信号

在编写s h e l l脚本时,只需关心信号1、2、3和1 5。当脚本捕捉到一个信号后,它可能会采取下面三种操作之一:

1) 不采取任何行动,由系统来进行处理。

2) 捕获该信号,但忽略它。

3) 捕获该信号,并采取相应的行动。

 

7.trap

t r a p可以使你在脚本中捕捉信号。该命令的一般形式为:

trap name signal(s)

其中,n a m e是捕捉到信号以后所采取的一系列操作。实际生活中, n a m e一般是一个专门用来处理所捕捉信号的函数。N a m e需要用双引号( “ ” )引起来。S i g n a l就是待捕捉的信号。

脚本在捕捉到一个信号以后,通常会采取某些行动。最常见的行动包括:

1) 清除临时文件。

2) 忽略该信号。

3) 询问用户是否终止该脚本的运行。

下表列出了一些最常见的t r a p命令用法:

trap "" 2 3                    忽略信号2和信号3,用户不能终止该脚本

trap"commands" 2 3     如果捕捉到信号2或3,就执行相应的c o m m a n d s命令

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

也可以使用单引号( ‘’ )来代替双引号( “” );其结果是一样的。

#!/bin/sh

Trap “my_exit” 2

LOOP=0

My_exit()

{

Echo “you just hit <CTRL-C>, at number $LOOP”

Echo “I will now exit”

Exit 1

}

While :

Do

       LOOP=’`expr $LOOP + 1`

       Echo $LOOP

Done

 

8. 忽略信号

忽略信号的一般格式为(信号9除外) :

trap""signal no:(s)

注意,在双引号之间没有任何字符,为了重新回到捕捉信号的状态,可以使用如下的命

令:

trap"do something" signal no:(s)

下面我们来总结一下上述方法。

trap ""1 2 3 15:忽略信号。

关键性的处理过程

trap"my_exit" 1 2 3 15:重新回到捕捉信号的状态,在捕捉到信号后调用 m y _ e x i t函数。

 

9. eval

e v a l命令将会首先扫描命令行进行所有的置换,然后再执行该命令。该命令适用于那些一

次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的变量

有时被称为复杂变量。不过我觉得这些变量本身并不复杂。

e v a l命令也可以用于回显简单变量,不一定是复杂变量。

$ NAME=Honeysuckle

$eval echo $NAME

Honeysuckle

执行含有字符串的命令:

$MYFILE=”cat testfile”

$echo $MYFILE

Cat testfile

$eval $MYFILE

Maydate, Maydate

Go down

从上面的结果可以看出,使用e v a l命令不但可以置换该变量,还能够执行相应的命令。第一次扫描进行了变量置换,第二次扫描执行了该字符串中所包含的命令 cat testf。

 

10. logger命令

系统中含有相当多的日志文件。其中的一个日志文件叫作 m e s s a g e s,它通常位于/ v a r / a d m或/ v a r / l o g目录下。一个名为s y s l o g的配置文件可以用来定义记录在m e s s a g e s文件中的消息,这些消息有一定的格式。如果想知道系统中的相应配置,可以查看 / e t c / s y s l o g . c o n f文件。该文件中包含了用于发送各种不同类型消息的工具及它们的优先级。

l o g g e r命令的一般形式为:

logger -p -I message

其中:

- p:为优先级,这里只涉及到提示用户注意的优先级,这也是缺省值。

- i:在每个消息中记录发送消息的进程号。

可以使用如下命令:

$ logger –p notice “This is a test message.Please Ignore $LOGNAME”

可能需要等几分钟才能看到该消息被记录到 m e s s a g e文件中。

$ tail /var/adm/messages

Jun 17 10:36:49 acers6 dave:This is a test message.Please Ignore dave

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载