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. BZOJ 1019: [SHOI2008]汉诺塔

    Description 一个汉诺塔,给出了移动的优先顺序,问从A移到按照规则移到另一个柱子上的最少步数. 规则:小的在大的上面,每次不能移动上一次移动的,选择可行的优先级最高的. Sol DP. 倒着 ...

  2. 37 网络相关函数(五)——live555源码阅读(四)网络

    37 网络相关函数(五)——live555源码阅读(四)网络 37 网络相关函数(五)——live555源码阅读(四)网络 简介 10)MAKE_SOCKADDR_IN构建sockaddr_in结构体 ...

  3. git 使用入门篇

    最近准备给同事培训git,发现了一个不错的资源,在这里:http://www.gitguys.com/topics/creating-a-shared-repository-users-sharing ...

  4. python查找并删除相同文件-UNIQ File-wxPython-v6

    相比第一版,新增:菜单,对话框,文件过滤器,操作结果保存,配置功能(自己写了一个读写配置文件的功能),提示语优化,模块分化更合理. 截图: 源代码: UniqFile-wxPython-v6.py: ...

  5. js中修改标签的hidden属性

    hidden属性在html5中,只要存在,就是隐藏效果,而不论值为多少 要显示元素,要删除hidden属性,而不是设置为false <script type="text/javascr ...

  6. 在Linux服务器上配置phpMyAdmin

    使用php和mysql开发网站的话,phpmyadmin是一个非常友好的mysql管理工具,并且免费开源,国内很多虚拟主机都自带这样的管理工具,配置很简单,接下来在linux服务器上配置phpmyad ...

  7. MySQL SQL优化之in与range查询【转】

    本文来自:http://myrock.github.io/ 首先我们来说下in()这种方式的查询.在<高性能MySQL>里面提及用in这种方式可以有效的替代一定的range查询,提升查询效 ...

  8. Effective C++ -----条款38:通过复合塑模出has-a或“根据某物实现出”

    复合(composition)的意义和public继承完全不同. 在应用域(application domain),复合意味has-a(有一个).在实现域(implementation domain) ...

  9. Effective C++ -----条款08: 别让异常逃离析构函数

    析构函数绝对不要吐出异常.如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下它们(不传播)或结束程序. 如果客户需要对某个操作函数运行期间抛出的异常作出反应,那么class应 ...

  10. 【leetcode】Spiral Matrix(middle)

    Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...