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 "\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工具的更多相关文章
- Linux Shell 高级编程技巧4----几个常用的shell脚本例子
4.几个常用的shell脚本例子 4.0.在写脚本(同样适用在编程的时候),最好写好完善的注释 4.1.kill_processes.sh(一个杀死进程的脚本) #!/bin/bash c ...
- Linux Shell 高级编程技巧3----运行级别脚本介绍
3.运行级别脚本介绍 3.1.运行级别 运行级别介绍: 0 关机 1 单用户模式 2 多用户模式 ...
- Linux Shell 高级编程技巧1----深入讨论(awk、<<)
1.深入讨论(awk.<<) 1.1.深入讨论awk 记录和域,模式和动作,正则表达式和元字符 基础教程中已经介绍 条件和逻辑操作符 ...
- Shell高级编程视频教程-跟着老男孩一步步学习Shell高级编程实战视频教程
Shell高级编程视频教程-跟着老男孩一步步学习Shell高级编程实战视频教程 教程简介: 本教程共71节,主要介绍了shell的相关知识教程,如shell编程需要的基础知识储备.shell脚本概念介 ...
- 跟着老男孩一步步学习Shell高级编程实战
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/1264627 本sh ...
- (转)跟着老男孩一步步学习Shell高级编程实战
原文:http://oldboy.blog.51cto.com/2561410/1264627/ 跟着老男孩一步步学习Shell高级编程实战 原创作品,允许转载,转载时请务必以超链接形式标明文章 原 ...
- Linux环境高级编程--介绍
从今天開始.将开启Linux环境高级编程(Advanced Programming Of Linux Enviroment)的学习笔记或者说总结,我将持续和大家分享自己的学习成果.本系列博客依托于li ...
- centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课
centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件.目录属性 shell数组简单用法 $( ) 和$ ...
- [libgdx游戏开发教程]使用Libgdx进行游戏开发(11)-高级编程技巧 Box2d和Shader
高级编程技巧只是相对的,其实主要是讲物理模拟和着色器程序的使用. 本章主要讲解利用Box2D并用它来实现萝卜雨,然后是使用单色着色器shader让画面呈现单色状态:http://files.cnblo ...
随机推荐
- 单链表的类的c++实现
#include<iostream> using namespace std;template <class T>struct linkNode{ T data; linkNo ...
- I2C总线协议的简要说明
为了快速的了解I2C总线协议,此处采用另类的方式进行说明. 倘若你和另外一个人只能通过一个开关加灯泡的装置在不同的两个房间进行交流,以下是很简单能说明的一个模型: 你的房间有一个开关,另外一间房间有一 ...
- backbone & django csrf_token的问题
由于这个加入了token的验证,因此在backbone调用Model/Collection的save时会失败,错误403.(这里不讨论劫持重发的问题) 解决方案是:修改xmlHttpRequest的h ...
- Linux下安装Nginx服务器
安装Nginx之前,首先要安装好编译环境gcc和g++,然后以CentOS为例安装Nginx,安装Nginx需要PRCE库.zlib库和ssl的支持,除了ssl外其他的我们都是去官网下载: Nginx ...
- cxGRID中的字段怎么能以0.00的格式显示
CXGRID中的字段如何能以0.00的格式显示在CXGRID中如何让字段能以0.00的格式显示,我的字段是FLOAT类型,满意的马上给分! ------解决方案-------------------- ...
- ACM/ICPC 之 Floyd+记录路径后继(Hdu1385(ZOJ1456))
需要处理好字典序最小的路径 HDU1385(ZOJ1456)-Minimum Transport //Hdu1385-ZOJ1456 //给定邻接矩阵,求给定起点到终点的最短路径,若有相同路长的路径按 ...
- nyoj366_D的小L_字典序_全排列
D的小L 时间限制:4000 ms | 内存限制:65535 KB 难度:2 描述 一天TC的匡匡找ACM的小L玩三国杀,但是这会小L忙着哩,不想和匡匡玩但又怕匡匡生气,这时小L给 ...
- String.prototype.substr()
概述 substr() 方法返回字符串中从指定位置开始到指定长度的子字符串. 语法 str.substr(start[, length]) 参数 start 开始提取字符的位置.如果为负值,则被看作 ...
- JS match() 方法 使用
javascript中的match函数是使用正则表达式对字符串进行查找,并将查找的结果作为数组返回,在实际开发中非常的有用,使用方法如下: stringObj.match(rgExp) 其中strin ...
- java classpath批量设置shell脚本
java classpath批量设置shell脚本 注意:linux bash jar文件之间的分隔符是':' export JAR_HOME=path to directory which ...