- 工信部備案號 滇ICP備05000110號-1
- 滇公安備案 滇53010302000111
- 增值電信業(yè)務(wù)經(jīng)營許可證 B1.B2-20181647、滇B1.B2-20190004
- 云南互聯(lián)網(wǎng)協(xié)會理事單位
- 安全聯(lián)盟認證網(wǎng)站身份V標記
- 域名注冊服務(wù)機構(gòu)許可:滇D3-20230001
- 代理域名注冊服務(wù)機構(gòu):新網(wǎng)數(shù)碼
shell 跟蹤簡單的來說就是跟蹤 shell 腳本中的命令的執(zhí)行。要打開 shell 跟蹤,請使用 -x
調(diào)試選項。
這會讓 shell 在終端上顯示所有執(zhí)行的命令及其參數(shù)。
我們將使用下面的 sys_info.sh
shell 腳本,它會簡要地打印出你的系統(tǒng)日期和時間、登錄的用戶數(shù)和系統(tǒ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; }print_sys_info(){ echo "System Time : $DATE" echo "Number of users: $NO_USERS" echo "System Uptime : $UPTIME}check_rootprint_sys_infoexit 0
保存文件并執(zhí)行腳本。腳本只能用 root 用戶運行,因此如下使用 sudo 命令運行:
$ chmod +x sys_info.sh$ sudo bash -x sys_info.sh
shell 跟蹤 - 顯示腳本中的錯誤
從上面的輸出我們可以觀察到,首先執(zhí)行命令,然后其輸出做為一個變量的值。
例如,先執(zhí)行 date
,其輸出做為變量 DATE
的值。
我們可以執(zhí)行語法檢查來只顯示其中的語法錯誤,如下所示:
$ sudo bash -n sys_info.sh
腳本中語法檢查
如果我們審視這個 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
在 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)生任何輸出,因為我們的腳本語法上正確。我們也可以再次跟蹤腳本執(zhí)行,它應(yīng)該工作得很好:
$ sudo bash -x sys_info.sh
跟蹤 shell 腳本執(zhí)行
現(xiàn)在運行腳本。
$ sudo ./sys_info.sh
用 shell 腳本顯示日期、時間和運行時間
售前咨詢
售后咨詢
備案咨詢
二維碼
TOP