shell追踪模式,就是追踪shell脚本的命令执行情况。使用 -x 来切换到追踪模式。
我们使用sys_info.sh脚本来模拟这个操作,他简要打印系统日期,时间,用户登陆数,上线时间等,当然包括部分错误哦。
#!/bin/bash
#script to print brief system info
ROOT_ID="0"
DATE=`date`
NO_USERS=`who | wc -l`
UPTIME=`uptime`
check_root(){
if [ "$UID" -ne "$ROOT_ID" ]; then
echo "You are not allowed to execute this program!"
exit 1;
}
print_sys_info(){
echo "System Time : $DATE"
echo "Number of users: $NO_USERS"
echo "System Uptime : $UPTIME
}
check_root
print_sys_info
exit 0
现在保存后,调试运行这个脚本
$ chmod +x sys_info.sh
$ bash -x sys_info.sh
在这里,我们可以看到,一些命令输出赋值给变量,如date
赋值给DATE.\
我们也可以不执行脚本命令,来检查语法错误。
$ bash -n sys_info.sh
然后直接显示下面错误
原因是少了if 的结束符
check_root(){
if [ "$UID" -ne "$ROOT_ID" ]; then
echo "You are not allowed to execute this program!"
exit 1;
fi
}
继续运行检查
$ bash -n sys_info.sh
又显示错误
检查发现,输出echo 缺少一个“
print_sys_info(){
echo "System Time : $DATE"
echo "Number of users: $NO_USERS"
echo "System Uptime : $UPTIME ”
}
修改并保存后,重新检查 bash -n 没有发现错误。
执行 $ sudo bash -x sys_info.sh
最终显示如下:
这就是非常有用的shell追踪 ,你可以多试试。