脚本a.sh的内容为:
set -x
echo "$PWD"
运行脚本结果:
++ echo /home/yanwenjie/bashtest
/home/yanwenjie/bashtest
-x选项将回送经过參数替换、命令替换和其它命令行处理步骤后得到的命令行结果。
x选项在每一行開始都打印+,(可是不知道为什么我这边打印了2个),这实际上能够定制的,它是内置变量shell变量PS4的值。能够
比如脚本a.sh的内容例如以下:
PS4="debug->"
set -x
echo "$PWD"
运行结果:
$ ./a.sh
ddebug->echo /home/yanwenjie/bashtest
/home/yanwenjie/bashtest
(不知道为什么这边出现了2个d。
。谁能回答一下)
让我们简单回想一下PS1,PS2,PS3的作用:
PS1是用来控制shell提示符的样式。比如我登陆shell的式样是:root@ywjPC:~#
PS2是当我们输入"\"时。多行提示符的样式,默认是">".
PS3是Shell脚本中使用select时的提示符。
2.伪信号
伪信号和工作方式和trap一样。但它们时由shell本身产生,能够像对待shell脚本里的实际信号一样对待它。
伪信号 发送时间
EXIT shell从脚本中退出后
DEBUG shell已经运行了一个语句
注意:是伪信号,在真正的信号中是不包括这两个的。
linux的信号例如以下:
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
2.1.EXIT
比如以下的脚本a.sh:
trap "echo 'exit from shell'" EXIT
echo "hello"
运行结果:
# ./a.sh
hello
exit from shell
比如採用kill的方式则无法运行trap代码。
2.2.DEBUG
DEBUG用来在一个函数或脚本内全部语句后运行陷阱代码。
它的主要用途是用来作为一种跟踪错误的程序状态元素的强制性
方法。
比如以下的脚本a.sh:
function dbgtrap
{
echo "i=$i"
}
i=1
trap dbgtrap DEBUG
i=$((i+1))
i=$((i+1))
i=$((i+1))
trap - DEBUG
脚本中两个trap之间的每条语句运行后都会运行dbgtrap函数。包括第一个trap语句。
运行结果:
# ./a.sh
i=1
i=2
i=3
i=4
当中i=1是trap dbgtrap DEBUG语句运行后输出的。