文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>linux shell学习笔记 5

linux shell学习笔记 5

时间:2007-03-11  来源:wangbinde

[root@localhost ~]# cat kill_process.sh

#!/bin/bash

#获得当前进程号

current_PID=$$

#获得特定进程的进程号并重定向到一个临时文件

ps aux|grep "/usr/sbin/httpd"|grep -v "grep"|awk '{print $2}'>/tmp/${current_PID}.txt               grep –v “grep”命令将过滤到grep命令本身产生的进程号

#命令块开始

#for pid in `cat /tmp/${current_PID}.txt`

#do

#{

#echo "kill -9 $pid"

#kill -9 $pid

#}

#done

#命令块结束

echo "/tmp/${current_PID}.txt文件将要被删除"

rm -f /tmp/${current_PID}.txt

信号就是系统向脚本或命令发出的告知某个时间发生的消息,用kill –l命令列出所有的信号。Kill命令发出信号给进程。

信号

信号名

含义

1

SIGHUP

挂器或父亲进程被杀死

2

SIGINT

来自键盘的中断信号,通常是ctrl-c

3

SIGQUIT

从键盘退出

4

SIGKILL

无条件终止

5

SIGSEGV

段(内存)冲突

6

SIGTERM

条件终止(缺省杀进程)

信号0为“退出shell”信号。为了发出信号0,只要从命令行键入exit,或在一个进程或命令行中使用<ctrl-d>。

trap对信号的捕捉:

可以使用trap命令在脚本中捕捉信号,命令的格式是trap name signal(s),name是捕捉到信号后所采取的动作,实际中name是专门用来处理所捕捉信号的函数,name必须用双引号括起来。Signal就是待捕捉的信号。常见的动作有:

1)  清除临时文件

2)  忽略该信号。(trap “”23)

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

[root@localhost ~]# cat trap1.sh

#!/bin/bash

trap "exitprocess" 2

LOOP=0

function exitprocess()

{

echo "you just hit <ctrl-c>,at number $LOOP"

echo "I will now exit"

exit 1

}

while :

do

        LOOP=$[$LOOP+1]

        echo $LOOP

done

[root@localhost ~]# ./trap1.sh     此命令执行后,将在屏幕上输出递增的数字

在另一个终端中输入命令

root      2609  0.0  0.2  5192 1460 pts/1    Ss   22:20   0:00 -bash

root      2651 19.6  0.1  4484  996 pts/1    R+   22:30   0:00 /bin/bash ./trap1

root      2652  0.0  0.1  3800  772 pts/0    R+   22:30   0:00 ps aux

[root@localhost ~]# kill -2 2651

另一个终端脚本的运行将会终止

4766

4767

4768

4769

4770

you just hit <ctrl-c>,at number 4770

I will now exit

[root@localhost ~]# cat trap2.sh

#!/bin/bash

LOOP=0

trap 'exitprocess' 2

HOLD1=/tmp/hold1.$$

HOLD2=/tmp/hold2.$$

function exitprocess()

{

echo -e "/nRecived Interrupt ..."

echo -n "do you really wish to exit?(Y/N)"

read ANS

case $ANS in

Y|y)

        rm_tmp_file

        ;;

N|n)

        ;;

*)

        exitprocess

        ;;

esac

}

function rm_tmp_file()

{

echo "<ctrl-c> detecte .. Now cleaning up ... wait"

rm /tmp/*.$$ 2>/dev/null

exit 1

}

while :

do

        LOOP=$[$LOOP+1]

        echo $LOOP

        df>>$HOLD1

        ps xa>>$HOLD2

        sleep 1

done

[root@localhost ~]# ./trap2.sh

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

root      2569  0.0  0.2  6016 1484 pts/0    Ss   21:48   0:00 -bash

root      2876  0.0  0.4  8852 2140 ?        SNs  22:52   0:00 cupsd

root      2962  0.8  0.1  4876 1000 pts/0    S+   23:11   0:00 /bin/bash ./trap2

root      3242  1.6  0.2  5860 1428 pts/1    Ss   23:13   0:00 -bash

root      3297  0.0  0.1  5752  544 pts/0    S+   23:13   0:00 sleep 1

root      3298  0.0  0.1  3260  772 pts/1    R+   23:13   0:00 ps aux

[root@localhost ~]# kill -2 2962

另一个终端里回弹出提示

eval命令:

Eval命令将首先扫描命令行进行所有的置换,然后再执行该命令,此命令适用于那些一次扫描无法实现无法实现其功能的变量。

logger命令向/var/log/message文件发送消息。命令格式为:

logger –p –i message

-p是优先级,此优先级只用于提示用户注意的优先级。

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

[root@localhost ~]# mkdir -p /root/test/aa/bb                      此脚本用于建立和源目录相同的目录结构

[root@localhost ~]# mkdir -p /root/test/cc/ss                       创建源目录

[root@localhost ~]# ./cpdir.sh test test1

错误:目标目录test1不存在

[root@localhost ~]# mkdir test1

[root@localhost ~]# ./cpdir.sh test test1

源目录下test所有的子目录

-----------------------------

test/aa

test/aa/bb

test/cc

test/cc/ss

 

目标目录下test1所有的子目录

test1/aa

test1/aa/bb

test1/cc

test1/cc/ss

 

----------------------------

 

[root@localhost ~]# cat cpdir.sh

#!/bin/bash

#此脚本用于将源目录全部复制到目标目录中?确保目标目录中的子目录数空目录。

#脚本用法函数

usage()

{

echo "cpdir.sh 源目录 目标目录"

}

#判断是否为两个参数,否则提示语法

if [ $# -ne 2 ]

then

{

usage

exit 0

}

fi

srcdir=$1

desdir=$2

#判断源目录${srcdir}是否为空目录,否则提示错误信息和语法

if [ ! -d $srcdir ]

then

{

usage

echo "错误:源目录${srcdir}不是空目录"

exit

}

fi

#判断目标目录${desdir}是否为空,否则提示错误信息和语法.

if [ ! -d $desdir ]

then

{

echo "错误:目标目录${desdir}不存在"

exit

}

fi

processid=$$

#查找源目录下所有的子目录,输出并保存到/tmp/srcdir_tmp_进程号.txt的文件中

echo "源目录下${srcdir}所有的子目录"

echo "-----------------------------"

find $srcdir/* -type d|/usr/bin/tee /tmp/srcdir_tmp_${processid}.txt

sed "s/^${srcdir}/${desdir}/g" /tmp/srcdir_tmp_${processid}.txt >/tmp/srcdir_${processid}.txt

#在目标目录下建立空子目录

rm -fr ${desdir}/*

for subdir in `cat /tmp/srcdir_${processid}.txt`

do

{

        mkdir ${subdir}

}

done

echo ""

echo "目标目录下${desdir}所有的子目录"

find $desdir/* -type d|/usr/bin/tee /tmp/desdir_${processid}.txt

#比较在目标目录下建立空目录后的差异

echo ""

echo "----------------------------"

diff /tmp/desdir_${processid}.txt /tmp/desdir_${processid}.txt

#rm -fr /tmp/srcdir_${processid}.txt

#rm -fr /tmp/desdir_${processid}.txt

#rm -fr /tmp/srcdir_tmp_${processid}.txt

 

 

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

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载