Loading... <p style="text-align: center"> <strong>Trap<span style="font-size: 24px"><span style="font-family: 宋体">命令简介</span></span></strong></p> <p style="margin: 3px 0px 0px"><span style="font-family: Calibri;font-size: 10px"> </span></p> <p style="margin: 0px 0px 8px"><span style="font-family: Calibri;font-size: 10px"> </span></p> <h2 style="margin: 13px 0px 0px 36px">一、<span style="font-family: 宋体">基本概念</span></h2> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> trap</span><span style="font-family: 宋体">是一个</span><span style="font-family: Calibri">shell</span><span style="font-family: 宋体">内建命令,它用来在脚本中指定信号如何处理。比如,按</span><span style="font-family: Calibri">Ctrl+C</span><span style="font-family: 宋体">会使脚本终止执行,实际上系统发送了</span><span style="font-family: Calibri">SIGINT</span><span style="font-family: 宋体">信号给脚本进程,</span><span style="color: red"><span style="font-family: Calibri">SIGINT</span></span><span style="color: red;font-family: 宋体">信号的默认处理方式就是退出程序</span><span style="font-family: 宋体">。如果要在</span><span style="font-family: Calibri">Ctrl +C</span><span style="font-family: 宋体">不退出程序,那么就得使用</span><span style="font-family: Calibri">trap</span><span style="font-family: 宋体">命令来指定一下</span><span style="font-family: Calibri">SIGINT</span><span style="font-family: 宋体">的处理方式了。</span><span style="font-family: Calibri">trap</span><span style="font-family: 宋体">命令不仅仅处理</span><span style="font-family: Calibri">Linux</span><span style="font-family: 宋体">信号,还能对脚本退出(</span><span style="font-family: Calibri">EXIT</span><span style="font-family: 宋体">)、调试(</span><span style="font-family: Calibri">DEBUG</span><span style="font-family: 宋体">)、错误(</span><span style="font-family: Calibri">ERR</span><span style="font-family: 宋体">)、返回(</span><span style="font-family: Calibri">RETURN</span><span style="font-family: 宋体">)等情况指定处理方式。</span></p> <h2 style="margin: 13px 0px 0px 36px">二、<span style="font-family: 宋体">基本格式</span></h2> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">格式:</span><span style="font-family: Calibri">trap "commands" signals</span></p> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">当</span><span style="font-family: Calibri">shell</span><span style="font-family: 宋体">接收到</span><span style="font-family: Calibri">signals</span><span style="font-family: 宋体">指定的信号时,执行</span><span style="font-family: Calibri">commands</span><span style="font-family: 宋体">命令。</span></p> <h3 style="margin: 13px 0px 0px">1<span style="font-family: 宋体">、格式:</span>trap signals</h3> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">如果没有指定命令部分,那么就将信号处理复原。比如</span><span style="font-family: Calibri"> trap INT </span><span style="font-family: 宋体">就表明恢复</span><span style="font-family: Calibri">Ctrl+C</span><span style="font-family: 宋体">退出</span></p> <h3 style="margin: 13px 0px 0px">2<span style="font-family: 宋体">、格式:</span>trap "" signals</h3> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">忽略信号</span><span style="font-family: Calibri">signals</span><span style="font-family: 宋体">,可以多个,比如</span><span style="font-family: Calibri"> trap "" INT </span><span style="font-family: 宋体">表明忽略</span><span style="font-family: Calibri">SIGINT</span><span style="font-family: 宋体">信号,按</span><span style="font-family: Calibri">Ctrl+C</span><span style="font-family: 宋体">也不能使脚本退出。又如</span><span style="font-family: Calibri"> trap "" HUP </span><span style="font-family: 宋体">表明忽略</span><span style="font-family: Calibri">SIGHUP</span><span style="font-family: 宋体">信号,即网络断开时也不能使脚本退出</span></p> <h3 style="margin: 13px 0px 0px">3<span style="font-family: 宋体">、格式:</span>trap -p signal</h3> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">把当前的</span><span style="font-family: Calibri">trap</span><span style="font-family: 宋体">设置打印出来</span></p> <h3 style="margin: 13px 0px 0px">4<span style="font-family: 宋体">、格式:</span>trap -l</h3> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">把所有信号打印出来</span></p> <h3 style="margin: 13px 0px 0px">5<span style="font-family: 宋体">、格式:</span>trap "commands" EXIT</h3> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">脚本退出时执行</span><span style="font-family: Calibri">commands</span><span style="font-family: 宋体">指定的命令</span></p> <h2 style="margin: 13px 0px 0px"><span style="font-family: 宋体">三、实例分析</span></h2> <h3 style="margin: 13px 0px 0px"><span style="font-family: Calibri"> 1</span><span style="font-family: 宋体">、写一个脚本</span><span style="font-family: Calibri">ping A</span><span style="font-family: 宋体">、</span>B<span style="font-family: 宋体">、</span>C<span style="font-family: 宋体">类</span>IP<span style="font-family: 宋体">地址探测所有的主机是否在线;</span></h3> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> <img title="1431271451821749.png" alt="1.png" src="//cto.wang/usr/uploads/2016/07/20160703180242-93.png" /></span></p> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">说明:如果范围为</span><span style="font-family: Calibri">{1..255}</span><span style="font-family: 宋体">时,执行时间比较长,此时</span><span style="font-family: Calibri">ctrl+c</span><span style="font-family: 宋体">中断时无法中断,这时我们可以使用</span><span style="font-family: Calibri">tarp</span><span style="font-family: 宋体">命令,当执行</span><span style="font-family: Calibri">ctrl+c</span><span style="font-family: 宋体">时,会执行一个命令或者行数,见例</span><span style="font-family: Calibri">2</span></p> <h3 style="margin: 13px 0px 0px"><span style="font-family: Calibri"> 2</span><span style="font-family: 宋体">、用</span>trap<span style="font-family: 宋体">实现中断执行;</span></h3> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> <img title="1431271475119256.png" alt="2.png" src="//cto.wang/usr/uploads/2016/07/20160703180242-4.png" /></span></p> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> <img title="1431271509134110.png" alt="3.png" src="//cto.wang/usr/uploads/2016/07/20160703180242-93-1.png" /></span></p> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">说明:此时执行</span><span style="font-family: Calibri">ctrl+c</span><span style="font-family: 宋体">时将调用</span><span style="font-family: Calibri">quitScript</span><span style="font-family: 宋体">函数,执行退出。</span></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信