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

使用shell追踪模式

在这里,我们可以看到,一些命令输出赋值给变量,如date赋值给DATE.\

我们也可以不执行脚本命令,来检查语法错误。

$  bash -n sys_info.sh 

然后直接显示下面错误
使用shell追踪模式

原因是少了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

又显示错误
使用shell追踪模式
检查发现,输出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追踪模式

这就是非常有用的shell追踪 ,你可以多试试。

相关文章: