国产欧美日韩第一页|日本一二三不卡视频|在线精品小视频,亚洲第一免费播放区,metcn人体亚洲一区,亚洲精品午夜视频

幫助中心 >  技術(shù)知識庫 >  云服務(wù)器 >  IIS的使用和管理 >  如何在 Shell 腳本中跟蹤調(diào)試命令的執(zhí)行

如何在 Shell 腳本中跟蹤調(diào)試命令的執(zhí)行

2017-01-19 15:45:23 7910

shell 跟蹤簡單的來說就是跟蹤 shell 腳本中的命令的執(zhí)行。要打開 shell 跟蹤,請使用 -x 調(diào)試選項(xiàng)。

這會讓 shell 在終端上顯示所有執(zhí)行的命令及其參數(shù)。

我們將使用下面的 sys_info.sh shell 腳本,它會簡要地打印出你的系統(tǒng)日期和時間、登錄的用戶數(shù)和系統(tǒng)的運(yùn)行時間。不過,腳本中包含我們需要查找和更正的語法錯誤。

#!/bin/bash# script to print brief system infoROOT_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_rootprint_sys_infoexit 0

保存文件并執(zhí)行腳本。腳本只能用 root 用戶運(yùn)行,因此如下使用 sudo 命令運(yùn)行:

$ chmod +x sys_info.sh$ sudo bash -x sys_info.sh

Shell Tracing - Show Error in Script

shell 跟蹤 - 顯示腳本中的錯誤

從上面的輸出我們可以觀察到,首先執(zhí)行命令,然后其輸出做為一個變量的值。

例如,先執(zhí)行 date,其輸出做為變量 DATE 的值。

我們可以執(zhí)行語法檢查來只顯示其中的語法錯誤,如下所示:

$ sudo bash -n sys_info.sh

Syntax Checking in Script

腳本中語法檢查

如果我們審視這個 shell 腳本,我們就會發(fā)現(xiàn) if 語句缺少了封閉條件的 fi 關(guān)鍵字。因此,讓我們加上它,新的腳本應(yīng)該看起來像這樣:

#!/bin/bash#script to print brief system infoROOT_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;  fi    }print_sys_info(){  echo "System Time    : $DATE"   echo "Number of users: $NO_USERS"  echo "System Uptime  : $UPTIME}check_rootprint_sys_infoexit 0

再次保存文件并以 root 執(zhí)行,同時做語法檢查:

$ sudo bash -n sys_info.sh

Perform Syntax Check in Shell Scripts

在 shell 腳本中執(zhí)行語法檢查

上面的語法檢查操作的結(jié)果仍然顯示在腳本的第 21 行還有一個錯誤。所以,我們?nèi)匀灰m正一些語法。

再一次分析腳本,會發(fā)現(xiàn)第 21 行的錯誤是由于在 print_sys_info 函數(shù)內(nèi)最后一個 echo 命令中沒有閉合雙引號 "

我們將在 echo 命令中添加閉合雙引號并保存文件。修改過的腳本如下:

#!/bin/bash#script to print brief system infoROOT_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;  fi}print_sys_info(){  echo "System Time    : $DATE"  echo "Number of users: $NO_USERS"  echo "System Uptime  : $UPTIME"}check_rootprint_sys_infoexit 0

現(xiàn)在再一次檢查語法。

$ sudo bash -n sys_info.sh

上面的命令不會產(chǎn)生任何輸出,因?yàn)槲覀兊哪_本語法上正確。我們也可以再次跟蹤腳本執(zhí)行,它應(yīng)該工作得很好:

$ sudo bash -x sys_info.sh

Trace Shell Script Execution

跟蹤 shell 腳本執(zhí)行

現(xiàn)在運(yùn)行腳本。

$ sudo ./sys_info.sh

Shell Script to Show Date, Time and Uptime

用 shell 腳本顯示日期、時間和運(yùn)行時間


提交成功!非常感謝您的反饋,我們會繼續(xù)努力做到更好!

這條文檔是否有幫助解決問題?

非常抱歉未能幫助到您。為了給您提供更好的服務(wù),我們很需要您進(jìn)一步的反饋信息:

在文檔使用中是否遇到以下問題: