Linux Shell 高级编程技巧2----shell工具

2.shell工具
    2.1.日志文件
        简介
            建立日志文件是很重要的,记录了重要的信息。一旦出现错误,这些信息对于咱们排错是很是有用的;监控的信息也能够记录到日志文件
        经常使用的日志文件的方法
            以时间为标识的日志文件
                例子shell

#!/bin/bash
#当前的日期
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} 命令开始" >>$todaylog
#
#command blocks
sleep 4
#
#输出日志到日志文件
log_time_format=`date "+%Y-%m-%d %T"`
echo "${log_time_format}命令结束" >>$todaylog

            以进程号为标识的临时文件
                例子bash

#!/bin/bash
#取得当前进程号
current_PID=$$
#得到特定进程的进程号并重定向到一个临时文件中
ps -aux | grep "/user/sbin/httpd" | grep -v "grep" | awk '{print $2}' > /tmp/${current_PID}.txt
#命令块开始
for pid in `cat /tmp/${current_PID}.txt`
do
{
    echo "kill -9 $pid
    kill -9 $pid
}
done
#命令块结束
#删除临时文件
rm -f /tmp/${current_PID}.txt

    2.2.信号
        简介
            信号就是系统向脚本或命令发出的消息,告知它们某个事件的发生
        kill命令
            kill -l        列出全部的信号
            列出一些经常使用信号
                1    SIGHUP        挂起或父进程被杀死
                2    SIGINT        来自键盘的中断信号,一般是 Ctrl-C
                3    SIGQUIT        从键盘退出
                9    SIGKILL        无条件退出
                11    SIGSEGV        段(内存)冲突
                15    SIGTERM        软件终止(缺省杀进程)
                信号0为”退出shell“信号。为了发出信号0,只要从命令行键入exit,或者在一个进程或命令行中使用 Ctrl-D 便可
            kill        发送信号给进程
                例子
                    kill -s 信号名 进程号    这种格式来给进程发送相应信号
                        kill -s SIGKILL 7696    杀死进程号为7696的进程
                    kill -信号的编号 进程号        这种格式来给进程发送对应的信号
                        kill -9 7696        杀死进程号为7696的进程
    2.3.trap捕捉信号
        简介
            信号能够被应用程序或脚本捕获,并依据该进程号(一、二、3和15)采起相应的行动。一些信号不能被捕获。例如,若是一个命令收到了信号9,就没法再捕捉其余信号
        捕捉到一个信号后,它可能会采起下面的三种操做之一
            1.不采起任何行动,由系统来进行处理
            2.捕获该信号,可是忽略它
            3.捕捉该信号,并采起相应行动
        trap可使你在脚本中捕捉信号。命令格式是:trap name signal(s)
            其中name是捕捉到信号之后所采起的一系列操做。实际中,name通常是一个专门用来处理所捕捉信号的函数。name须要用双引号""引发来。
            signal就是待捕捉的信号
            最多见的行动是
                1.清除临时文件
                2.忽略该信号    例子:trap "" 2 3
                3.询问用户是否终止该脚本的运行
        例子1函数

#!/bin/bash
#捕获信号2,若是捕获到就执行exitprocess
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
    sleep 1
done

        例子2工具

#!/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> detected .. 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

    2.4.eval
        简介
            eval命令将会首先扫描命令行进行全部的置换,而后再执行该命令。该命令适用于那些一次扫描没法实现其功能的变量
        例子,myfile 文件的内容是 ls -l
            MYFILE="cat myfile";`eval $MYFILE`
            等价于    eval `cat myfile`
            也就是执行 cat myfile 输出结果所表明的那条命令
    2.5.logger
        简介:
            logger命令向/var/log/messages文件发送消息
        logger命令通常形式是:
            logger -p -i message
            -p    为优先级,这里只涉及到提示用户注意的优先级,这也是缺省值
            -i    在每一个信息中记录发送消息的进程号
        例子
            logger -p -i "chinaitlab shenzhen"
            查看 /var/log/messages 就能够查看插入了这条信息命令行

相关文章
相关标签/搜索