设为首页 收藏本站
查看: 1052|回复: 0

如何在shell中处理异常(Part 2)

[复制链接]

尚未签到

发表于 2015-4-28 12:11:33 | 显示全部楼层 |阅读模式
  本文来自于我的个人博客http://www.log4myself.com/archives/363

前言
  在前面一片文章里《如何在shell中处理异常(PART1)》,简单得介绍了几种如何在shell中处理异常的方法,本文继续介绍几种用法,其实说是几种,就一种。。就是合理使用trap。本文主要还是讲如何用在shell中用trap去处理各种事情,当然不仅仅是指异常。不过,我们首先应该讲得是异常。

用trap处理异常
  之前在《shell中的trap和expr》里简单得介绍过了trap,所以这次我们就直接上代码,上处理异常的代码,这样更加清晰明了,简单直接。
  先再重复下trap的使用方法吧:

trap [COMMAND] [SIGNAL]

  代表trap会捕获信号[SIGNAL]后运行[COMMAND]
  下面看段实例: #!/bin/bash trap “echo Fail unexpectedly on line \$FILENAME:\$LINENO!” ERR mkdir xxxx rm xxx
  这段代码可以简单得说明了trap在处理异常的应用,后面那个ERR,就是捕获所有非0返回的shell执行,如果非0,那就是异常,就会被trap直接捕获,而不会继续往下执行了。在本文中的shell还会打印出文件名和行号等信息,当然,这些你可以自由发挥了。当然,trap其实不仅仅可以做这一件事情,还有好多事情,他可以捕获各种信号,当然除了SIGKILL,所以,你可以使用trap做一些其他事情。

扩展阅读-使用trap做工作环境的清理
  什么是工作环境的清理呢,其实就是一般我们日常shell中可能会有各种临时文件,那留下这些文件总是不好的,所以你可以借用trap进行清理。我们看下下面这个shell程序

#!/bin/bash
TEMP_FILE=/tmp/printfile.txt
pr $1 > $TEMP_FILE
echo -n "Print file? [y/n]: "
read
if [ "$REPLY" = "y" ]; then
less $TEMP_FILE
fi
rm $TEMP_FILE

  这段代码的作用其实就是把用户一开始输入的存到一个临时文件里,然后询问下用户是否查看,如果查看就给print出来。当当然,用户看得话,没什么问题。看完了后,程序也就完了,临时文件也就删了。但关键是,如果程序在运行中异常终止了呢,或者用户直接按ctrl+C给终止了,这样,就会有一个临时文件留下。这个时候,你就可以去运用trap给你做些处理了。

#!/bin/bash
TEMP_FILE=/tmp/printfile.txt
trap "rm $TEMP_FILE; exit" SIGHUP SIGINT SIGTERM
pr $1 > $TEMP_FILE
echo -n "Print file? [y/n]: "
read
if [ "$REPLY" = "y" ]; then
lpr $TEMP_FILE
fi
rm $TEMP_FILE

  看上面这个程序,即使用户按下了ctrl+C ,trap也会可以捕获到,这样无论如何,临时文件都会被清理掉。
  好了,就说这么多了,没啥技术含量,就是玩玩。

参考资料
  http://www.linuxcommand.org/wss0160.php

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-61556-1-1.html 上篇帖子: 在android执行shell命令 下篇帖子: 如何在shell中处理异常(Part 1)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表