文章目录
- 语法详解
- trap格式
- 信号和用途
- 最常用的信号
- trap常用的命令
- 示例
- ctrl + c 示例
- 信号屏蔽和恢复
- trap - 示例
- debug示例
- exit示例
- return示例
- 综合案例
- 案例1
- 案例2
- 案例3
- 总结
- 友情链接
信号捕捉 trap,它用于捕获指定的信号并执行预定义的命令。比如,按Ctrl+C会使脚本终止执行,实际上系统发送了SIGINT信号给脚本进程,SIGINT信号的默认处理方式就是退出程序。如果要在Ctrl +C不退出程序,那么就得使用trap命令来指定一下SIGINT的处理方式了。trap命令不仅仅处理Linux信号,还能对脚本退出(EXIT)、调试(DEBUG)、错误(ERR)、返回(RETURN)等情况指定处理方式。
语法详解
trap格式
它用于捕获指定的信号并执行预定义的命令。
- arg
是shell命令或者自定义函数或者脚本 - sigspec
sigspec可以是信号名或者数值。信号名的大小写不敏感,SIG这个前缀也是可选的。以下的命令效果一样
也可以同时写多个信号量
信号和用途
- trap -l :可以通过trap -l查看类似kill -l的输出查看一共有多少信号量
- Linux信号介绍
例如常见的ctrl +c 终止进程对应的就是sigint也就是2。ctrl+z(暂停进程,打入后台)
最常用的信号
Ctrl + c: 程序终止信号,也可以指定为2或者int
EXIT:在shell退出前执行trap设置的命令,也可以指定为0
RETURN:在函数返回时,或者.和source执行其他脚本返回时,执行trap设置的命令
DEBUG:在任何命令执行前执行trap设置的命令,但对于函数仅在函数的第一条命令前执行一次
trap常用的命令
- trap “脚本或命令” signal-list
当脚本收到signal-list清单内列出的信号时,trap命令执行双引号中的命令,而不会执行原操作 - trap signal-list
如果没有指定命令部分,那么就将信号处理复原。比如 trap INT 就表明恢复Ctrl+C退出 - trap “” signal-list
忽略信号signals,可以多个,比如 trap “” INT 表明忽略SIGINT信号,按Ctrl+C也不能使脚本或者命令退出。 - trap “-” signal-list
恢复原信号的操作 - trap -p
当前的trap设置打印出来 - trap “commands” EXIT
脚本退出时执行的命令
trap -l
把所有信号打印出来
- trap : 2
恢复信号
示例
ctrl + c 示例
Ctrl + c: 程序终止信号,也可以指定为2或者int
信号屏蔽和恢复
[root@server ~]# trap “” 2 ##信号屏蔽
[root@server ~]# trap : 2 ##恢复信号
trap - 示例
debug示例
DEBUG:在任何命令执行前执行trap设置的命令,但对于函数仅在函数的第一条命令前执行一次
exit示例
exit
return示例
return
综合案例
案例1
- 源码
- 效果
案例2
- 源码
- 效果
案例3
执行脚本时,脚本完成后,将新建的文件全部删除掉
- 源码
- 效果