1.trap命令
trap命令用于捕获指定的信号,并配置在接收到指定的信号后将要采取的动作。常见的用途是在脚本程序被中断时完成清理工作。
2.trap的使用格式
(1)trap ‘command’ signal-list 表示捕获信号列表signal-list中的信号,然后执行command命令。
(2)trap ‘’ signal-list 表示捕获signal-list信号列表,并且什么也不做,也就是让脚本忽略这些信号。
(3)trap signal-list 表示让捕获signal-list信号后,执行默认操作。
例如,
trap 'echo you hit Ctrl-C/Ctrl-\, now exiting..; exit' SIGINT SIGQUIT #表示捕获SIGINT和SIGQUIT信号,然后执行echo和exit操作。
trap 'my_exit; exit' SIGINT SIGQUIT #将trap的command放到函数中
my_exit()
{
echo "you hit Ctrl-C/Ctrl-\, now exiting.."
}
3.一点闲话
在shell脚本中,如果某一个命令执行失败,那么该命令后面的其他的命令仍然会执行,当然除了&& ||中的命令。
所以我们需要在脚本中使用if [ $? == 0 ]; then这样的语句来判断,避免后续命令的错误执行。 当然,我们可以在脚本的开始处加入set -e能达到同样的效果。
4.关于set命令
(1)set -e 脚本执行过程如果有命令执行返回值为非0,那么脚本将结束,不在继续执行,类似于-o errexit。使用set +e表示取消set -e。所以在编写脚本中,我们最好默认加上set -e。
(2)set -u 表示脚本中如果有变量没有初始化,那么执行脚本时将会报错。
(3)set -x 表示debug模式执行脚本,相当于sh -x scriptname.sh