zoukankan      html  css  js  c++  java
  • Linux Shell 高级编程技巧2----shell工具

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

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

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

    #!/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捕捉信号
            简介
                信号可以被应用程序或脚本捕获,并依据该进程号(1、2、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 "
    Recived 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 就可以查看插入了这条信息

  • 相关阅读:
    PHP导出sql文件
    BugScan插件编写高(gǎo)级(jī)教程
    php父级目录文件包函问题
    检测web服务器指定位置大文件是否存在
    解决Linux关闭SSH,终端后运行程序终止问题(包括后台)
    Python Matplotlib绘图库 安装
    校园网突围之路由器开wifi__windows版
    [openwrt 项目开发笔记]: 传送门
    [Openwrt 项目开发笔记]:PHP+Nginx安装(七)
    [Openwrt 项目开发笔记]:MySQL配置(六)
  • 原文地址:https://www.cnblogs.com/xumenger/p/4293400.html
Copyright © 2011-2022 走看看