• 嵌入式成长轨迹12 【嵌入式环境及基础】【Linux shell深入】【shell工具】


    一、日志文件
    记录了一些重要信息,可以用于监控、排错

    1、以时间为标识的日志文件
    长期保留

    【示例脚本】

    #!/bin/bash
    #
    datelog.sh

    #当前的日期
    current_date=`date "+%Y%m%d"`
    #今天的日志文件名
    todaylog="${current_date}.log"
    #如果日志文件不存在,创建一个
    if [ ! -f $todaylog ]
    #注意上边的空格一个都不能少
    then
    #注意touch无法创建目录,所以之前文件名不能包含新目录
    #
    否则就有touch: 无法触碰 “log/20120228.log”: 没有那个文件或目录
    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


    2、以进程号为标识的临时文件
    脚本中用来记录临时数据,以供程序使用

    【示例脚本】

     1 #!/bin/bash
    2 #processlog.sh
    3
    4 #取得当前进程号
    5 current_PID=$$
    6 #获得特定进程的进程号并重定向到一个临时文件中
    7 ps -aux|grep "/usr/sbin"|grep -v "grep"|awk '{print $2}'>./${current_PID}.txt
    8 #命令块开始
    9 #for pid in "cat /tmp/${current_PID}.txt"
    10 #do
    11 #done
    12 #命令块结束
    13 #删除临时文件
    14 rm -f /tmp/${current_PID}.txt

    二、信号
    信号就是系统向脚本或命令发出的消息,告知它们某个事件的发生
    kill -l 列出所有的信号
    kill发生信号给进程


    SIGHUP 1 A 终端挂起或者控制进程终止
    SIGINT 2 A 键盘中断(如break键被按下)
    SIGQUIT 3 C 键盘的退出键被按下
    SIGKILL 9 AEF Kill信号
    SIGSEGV 11 C 无效的内存引用
    SIGTERM 15 A 终止信号
    信号0为退出shell信号,要发出它只要从命令行键入exit,或在下一个进程或命令行中使用<CTRL-D>即可


    kill -SIGKILL xxxx 或者
    kill -9 xxxx  都可以杀死进程
    信号1可以通过杀死父进程来杀死所有子进程

    三、trap捕捉信号
    一些信号可以被应用程序或脚本捕获,并依据该信号采取相应行动。但注意,如果一个命令收到了信号9,就无法再捕捉其他信号

    trap可以用来在脚本中捕捉信号,命令形式为: trap name signal
    其中,name是捕捉到信号后采取的一系列操作,通常是一个函数。它需要用双引号引起来

    最常见的行动包括:
    1)清除临时文件
    2)忽略该信号
    3)询问用户是否终止该脚本的运行

    【示例1】

    #!/bin/bash
    #
    trap1.sh
    trap "exitprocess" 2
    LOOP=0
    function exitprocess()
    {
    echo "You just hit <CTRL-C>,at num $LOOP"
    echo "I will now exit"
    exit 1
    }
    while :
    do
    LOOP=$[ $LOOP+1 ]
    echo $LOOP
    sleep 1
    done

    【示例2】

     1 #!/bin/bash
    2 #trap2.sh
    3
    4 LOOP=0
    5 trap "exitprocess" 2
    6 HOLD1=/tmp/hold1.$$
    7 HOLD2=/tmp/hold2.$$
    8 function exitprocess()
    9 {
    10 echo -e "\nReceive Interrupt ..."
    11 echo -n "Do you realy wish to exit?(Y/N)"
    12 read ANS
    13 case $ANS in
    14 Y|y)
    15 rm_tmp_file
    16 ;;
    17 N|n)
    18 ;;
    19 *)
    20 exitprocess
    21 ;;
    22 esac
    23 }
    24
    25 function rm_tmp_file
    26 {
    27 echo "<CTRL-C> detected .. Now cleaning up .. wait"
    28 rm /tmo/*.$$ 2>/dev/null
    29 exit 1
    30 }
    31 while :
    32 do
    33 LOOP=$[$LOOP+1]
    34 echo $LOOP
    35 df>>$HOLD1
    36 ps -xa >>$HOLD2
    37 sleep 1
    38 done
    39
    40 }


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


    MYFILE="cat myfile";`eval $MYFILE`

    【终端示例】

    #eval演示
    [root@localhost ~]# cat test.sh
    ls -l
    [root@localhost ~]# myfile="cat test.sh";`eval $myfile`
    总计 152
    -rw------- 1 root root 1982 2009-03-28 anaconda-ks.cfg
    -rwxr-xr-x 1 root root 684 02-28 19:40 datelog.sh
    -rwxr-xr-x 1 root root 417 02-26 21:11 hellofun.sh
    -rw-r--r-- 1 root root 61777 2009-03-28 install.log
    -rw-r--r-- 1 root root 6410 2009-03-28 install.log.syslog
    -rwxr-xr-x 1 root root 348 02-28 20:19 processlog.sh
    -rw-r--r-- 1 root root 132 02-22 19:31 testfile.dat
    -rw-r--r-- 1 root root 6 02-28 21:06 test.sh
    -rwxr-xr-x 1 root root 220 02-28 20:52 trap1.sh
    -rwxr-xr-x 1 root root 468 02-28 21:01 trap2.sh
    drwxr-xr-x 2 root root 4096 2010-04-22 公共的
    drwxr-xr-x 2 root root 4096 2010-04-22 模板
    drwxr-xr-x 2 root root 4096 2010-04-22 视频
    drwxr-xr-x 2 root root 4096 2010-04-22 图片
    drwxr-xr-x 2 root root 4096 02-28 20:45 文档
    drwxr-xr-x 2 root root 4096 2010-04-22 下载
    drwxr-xr-x 2 root root 4096 2010-04-22 音乐
    drwxr-xr-x 2 root root 4096 2010-04-22 桌面
    [root@localhost ~]# vi test.sh
    [root@localhost ~]# cat test.sh
    ls
    [root@localhost ~]# myfile="cat test.sh";`eval $myfile`
    anaconda-ks.cfg install.log testfile.dat trap2.sh 视频 下载
    datelog.sh install.log.syslog test.sh 公共的 图片 音乐
    hellofun.sh processlog.sh trap1.sh 模板 文档 桌面


    五、logger
    logger命令向/var/log/message文件发送消息
    logger命令的一般形式为 logger -p -i message
    -p 为优先级,这里只涉及提示用户注意的优先级,也是缺省值
    -i 在每个消息中记录发送消息的进程号

  • 相关阅读:
    付宇泽20190912-1 每周例行报告
    付宇泽20190912-3 词频统计
    付宇泽20190912-2 命令行
    付宇泽20190905-1 每周例行报告
    付宇泽20190905-2 博客作业
    付宇泽20190905-3 命令行和控制台编程
    罗杨美慧 20190905-3 命令行和控制台编程
    【Linux运维】Centos7上借助ansible搭建LVS+Keepalived
    【shell 练习1】编写Shell条件句练习
    【第四章】Shell 条件测试表达式
  • 原文地址:https://www.cnblogs.com/zeedmood/p/2382482.html
Copyright © 2020-2023  润新知