Shell编程笔记-Shell工具

上一篇 / 下一篇  2008-07-22 11:41:15 / 个人分类:linux编程

一.日志文件
  1.创建日志文件的重要性:
    记录重要的信息,如登录、运行情况、监控等。。为我们分析和排除错误非常有帮助
  2.以时间为标识的日志文件
    适用于长期存储的日志。举个创建以时间为标识日志的例子入下:
    #!/bin/bash
    #datelog.sh
    current_date=`date ""+%Y%m%d` #当前的日期( 年月日 )
    todaylog="log/${current_date}.log" #今天的日志文件名
    #如果日志文件不存在,创建一个
    if [ ! -f $todaylog ]
      then
        touch $todaylog
    fi
    #输出日志到日志文件
    log_time_format=`date "+%Y-%m-%d %T"`
    echo "${log_time_format} commands start.....">>${todaylog}
    # commands blocks
    sleep 4
    log_time_format=`date "+%Y-%m-%d %T"`
    echo "${log_time_format} commands end!">>${todaylog} #结束时记录日志
  3.以进程号为标识的临时文件
    一般记录脚本运行过程中需要暂时记录的信息,一旦脚本运行结束,这些信息就可以删除。举个以进程号为标识的日志的例子:
    #!/bin/bash
    #kill_process.sh
    #取得当前进程号
    current_pid=$$
    #获得特定进程号并重定向到一个临时文件中
    ps -aux|grep "/usr/sbin/httpd" | grep -v "grep"| awk '{print $2}' >/tmp/${current_pid}.txt
    #commands start
    for pid in `cat /tmp/${current_pid}.txt
    do
    {
        echo "kill -9 $pid"
        kill -9 $pid
    }
    done
    rm -f /tmp/${current_pid}.txt   //脚本运行结束前删除该日志文件

二.信号
  (1). 信号就是系统向脚本或命令发出的消息,告知它们某个事情的发生。
  (2). kill -l 列出所有的信号
  (3). kill发送信号给进程
  (4). 一些信号的含义:
  信号   信号名     含义
  0           退出shell信号,可以从命令行输入exit或在一个进程或命令行中使用<CTRL-d>
  1   SIGHUP   挂起或父进程被杀死
  2   SIGINT   来自键盘的中断信号,通常是<CTRL-C>
  3   SIGOUIT   从键盘退出
  9   SIGKILL   无条件终止
  11   SIGSEGV   段(内存)冲突
  15   SIGTERM   软件终止(缺省杀进程)
  (另外还有50多种信号,可以用kill -l 命令查看)
(5). 举例说明:kill -s SIGKILL 1234 表示无条件终止进程1234(进程号)
    通过kill -9 1234 其含义与上面一样。
   kill -1 1234 和kill -s SIGHUP 1234都是挂起 进程号为1234的进程
  
三.trap捕捉信号
   (1)信号可以被应用程序或脚本捕获,并依据该信号(1、2、3和15)采取相应的行动。一些信号不能被捕获。如,如果一个命令收到了信号9,就无法再捕获其他信号。
   (2)捕捉到一个信号后,可能会采取三中
     1].不采取任何行动,由系统来进行处理(如信号9由系统处理)
     2].捕获该信号,但忽略它
     3].捕获该信号,并采取相应的行动
   (3)trap可以使你在脚本中捕捉信号,命令形式为trap name signal(s)
      其中,name是捕捉到信号以后所采取的一系列操作。实际中,name一般是一个专门用来处理所捕捉信号的函数。name需要用双引号(“”)引起来。signal是待捕捉的信号。
      最常见的行动包括:
     1]清除临时文件
     2]忽略该信号(如trap "" 23)
      3]询问用户是否终止该脚本进程
   (4)举例说明:
     #!/bin/bash
      #trap.sh
      trap 'exitprocess' 2    #捕捉到信号2之后执行exitprocess function
      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
         sleep 1
        done
     
四.eval
(1)eval命令首先会扫描命令行进行所有的置换,然后再执行该命令。该命令适用于那些一次扫描无法实现其功能的变量。
 (2)举例:myfile="cat command.txt";`eval $myfile` 将会执行command.txt中的命令,如,若command.txt文件的内容是ls -al 则会执行该命令(一行行执行),若不是命令则提示出错信息。
五.logger
 (1)logger命令向/var/log/messages文件发送信息
 (2)logger命令的一般形式: logger -p -i message
    -p:为优先级别,这里只涉及到提示用户注意的优先级,这也是缺省值
    -i:在每个消息中记录发送消息的进程号
 (3)举例说明:logger -p 5 -i "hello" 将“hello”记录到/var/log/messages中

TAG:

引用 删除 Guest   /   2008-11-04 11:05:44
厉害
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-11-23  
      1
2345678
9101112131415
16171819202122
23242526272829
30      

数据统计

  • 访问量: 9722
  • 日志数: 48
  • 建立时间: 2007-12-07
  • 更新时间: 2008-10-28

RSS订阅

Open Toolbar