真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

這篇文章主要介紹怎么在Shell腳本中跟蹤調(diào)試命令的執(zhí)行,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

十年的都安網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。成都全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整都安建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“都安網(wǎng)站設(shè)計(jì)”,“都安網(wǎng)站推廣”以來,每個客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

本系列的前面部分清晰地闡明了另外兩種 shell 腳本調(diào)試模式:詳細(xì)模式和語法檢查模式,并用易于理解的例子展示了如何在這些模式下啟用 shell  腳本調(diào)試。

  1. 如何在 Linux 中啟用 Shell 腳本的調(diào)試模式

  2. 如何在 Shell 腳本中執(zhí)行語法檢查調(diào)試模式

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 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

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

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

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

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

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

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

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

$ sudo bash -n sys_info.sh

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

腳本中語法檢查

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

#!/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;   fi     } print_sys_info(){   echo "System Time    : $DATE"    echo "Number of users: $NO_USERS"   echo "System Uptime  : $UPTIME } check_root print_sys_info exit 0

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

$ sudo bash -n sys_info.sh

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

在 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 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;   fi } print_sys_info(){   echo "System Time    : $DATE"   echo "Number of users: $NO_USERS"   echo "System Uptime  : $UPTIME" } check_root print_sys_info exit 0

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

$ sudo bash -n sys_info.sh

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

$ sudo bash -x sys_info.sh

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

跟蹤 shell 腳本執(zhí)行

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

$ sudo ./sys_info.sh

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

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

shell 跟蹤執(zhí)行的重要性

shell 腳本跟蹤可以幫助我們識別語法錯誤,更重要的是識別邏輯錯誤。例如,在 sys_info.sh shell 腳本中的 check_root  函數(shù),它用于確定用戶是否為 root,因?yàn)槟_本只允許由超級用戶執(zhí)行。

check_root(){   if [ "$UID" -ne "$ROOT_ID" ]; then     echo "You are not allowed to execute this program!"     exit 1;   fi }

這里的魔法是由 if 語句表達(dá)式 ["$ UID" -ne "$ ROOT_ID"] 控制的,一旦我們不使用合適的數(shù)字運(yùn)算符(示例中為  -ne,這意味著不相等),我們最終可能會出一個邏輯錯誤。

假設(shè)我們使用 -eq (意思是等于),這將允許任何系統(tǒng)用戶以及 root 用戶運(yùn)行腳本,因此是一個邏輯錯誤。

check_root(){   if [ "$UID" -eq "$ROOT_ID" ]; then     echo "You are not allowed to execute this program!"     exit 1;   fi }

注意:我們在本系列開頭介紹過,set 這個 shell 內(nèi)置命令可以在 shell 腳本的特定部分激活調(diào)試。

因此,下面的行將幫助我們通過跟蹤腳本的執(zhí)行在其中找到這個邏輯錯誤:

具有邏輯錯誤的腳本:

#!/bin/bash #script to print brief system info ROOT_ID="0" DATE=`date` NO_USERS=`who | wc -l` UPTIME=`uptime` check_root(){   if [ "$UID" -eq "$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" } #turning on and off debugging of check_root function set -x ; check_root;  set +x ; print_sys_info exit 0

保存文件并調(diào)用腳本,在輸出中,我們可以看到一個普通系統(tǒng)用戶可以在未 sudo 的情況下運(yùn)行腳本。 這是因?yàn)?USER_ID 的值為 100,不等于為 0  的 root 的 ROOT_ID 。

$ ./sys_info.sh

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

以上是“怎么在Shell腳本中跟蹤調(diào)試命令的執(zhí)行”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


分享名稱:怎么在Shell腳本中跟蹤調(diào)試命令的執(zhí)行
分享路徑:http://weahome.cn/article/pijieo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部