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 "\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 就可以查看插入了这条信息

Linux Shell 高级编程技巧2----shell工具的更多相关文章

  1. Linux Shell 高级编程技巧4----几个常用的shell脚本例子

    4.几个常用的shell脚本例子    4.0.在写脚本(同样适用在编程的时候),最好写好完善的注释    4.1.kill_processes.sh(一个杀死进程的脚本) #!/bin/bash c ...

  2. Linux Shell 高级编程技巧3----运行级别脚本介绍

    3.运行级别脚本介绍    3.1.运行级别        运行级别介绍:            0    关机            1    单用户模式            2    多用户模式 ...

  3. Linux Shell 高级编程技巧1----深入讨论(awk、<<)

    1.深入讨论(awk.<<)    1.1.深入讨论awk        记录和域,模式和动作,正则表达式和元字符            基础教程中已经介绍        条件和逻辑操作符 ...

  4. Shell高级编程视频教程-跟着老男孩一步步学习Shell高级编程实战视频教程

    Shell高级编程视频教程-跟着老男孩一步步学习Shell高级编程实战视频教程 教程简介: 本教程共71节,主要介绍了shell的相关知识教程,如shell编程需要的基础知识储备.shell脚本概念介 ...

  5. 跟着老男孩一步步学习Shell高级编程实战

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/1264627 本sh ...

  6. (转)跟着老男孩一步步学习Shell高级编程实战

    原文:http://oldboy.blog.51cto.com/2561410/1264627/  跟着老男孩一步步学习Shell高级编程实战 原创作品,允许转载,转载时请务必以超链接形式标明文章 原 ...

  7. Linux环境高级编程--介绍

    从今天開始.将开启Linux环境高级编程(Advanced Programming Of Linux Enviroment)的学习笔记或者说总结,我将持续和大家分享自己的学习成果.本系列博客依托于li ...

  8. centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课

    centos   shell脚本编程1 正则  shell脚本结构  read命令  date命令的用法  shell中的逻辑判断  if 判断文件.目录属性  shell数组简单用法 $( ) 和$ ...

  9. [libgdx游戏开发教程]使用Libgdx进行游戏开发(11)-高级编程技巧 Box2d和Shader

    高级编程技巧只是相对的,其实主要是讲物理模拟和着色器程序的使用. 本章主要讲解利用Box2D并用它来实现萝卜雨,然后是使用单色着色器shader让画面呈现单色状态:http://files.cnblo ...

随机推荐

  1. gulp学习笔记1-定义

    1.gulp是前端开发过程中对代码进行构建的自动化工具,可以通过它提供的各种插件实现如:预编译(sass&less).压缩.合并.图片精灵等前端的重复操作 2.基于nodeJS,以js编写插件 ...

  2. POJ 2195 Going Home 最小费用最大流 尼玛,心累

    D - Going Home Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Subm ...

  3. Python自动化之常用模块

    1 time和datetime模块 #_*_coding:utf-8_*_ __author__ = 'Alex Li' import time # print(time.clock()) #返回处理 ...

  4. apache virtualhost 针对ip开放访问

    http://serverfault.com/questions/246003/apache-httpd-how-can-i-deny-from-all-allow-from-subnet-but-d ...

  5. .NET中六个重要的概念:栈、堆、值类型、引用类型、装箱和拆箱 (转)

    作者: Edison Chou  来源: 博客园  发布时间: 2014-09-03 15:59  阅读: 318 次  推荐: 2   原文链接   [收藏]   原文作者:Shivprasad k ...

  6. Apache2.4.6 添加虚拟主机

    apache2.4 与 apache2.2 的虚拟主机配置写法有所不同 apache2.2的写法: <VirtualHost *:80> ServerName domain.com Doc ...

  7. Java I/O模型的简单说明

    1.同步和异步 同步:如果有多个任务或者事件要发生,这些任务或者事件必须逐个地进行,一个事件或者任务的执行会导致整个流程的暂时等待,这些事件没有办法并发地执行,最简单的例子就是顺序的执行两个方法,当第 ...

  8. MyISAM 调度(优先级)的一些优化【转】

    MySQL的MyISAM引擎现在越来越被淡化了,但是还是有必要再温习总结一下的. 允许你改变语句调度的优先级,它可以使来自多个客户端的查询更好地协作,这样单个客户端就不会由于锁定而等待很长时间.改变优 ...

  9. h5页面的公共css

    /*reset*/body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,tex ...

  10. 7.django之自定义分页记录

    只是大概记录下步骤: 1.表结构: class UserProfile(models.Model): ''' 用户表 ''' user = models.OneToOneField(User,verb ...