歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> linuxshell編程指南第二十三章------腳本調試

linuxshell編程指南第二十三章------腳本調試

日期:2017/3/1 13:51:08   编辑:SHELL編程

shell編程最煩人的一項工作是調試問題。有一些方法可以借鑒,但是最好能在問題出現前防止大部分錯誤,為此應遵循以下規則。

需要牢記的一點是當shell打印出一個腳本錯誤後,不要只看那些疑問行。而是要觀察整個相關代碼段。shell不會對錯誤進行精確定位,而是在試圖結束一個語句時進行錯誤統計。

循環錯誤

for、while、until和case語句中的錯誤是指實際語句段不正確。也許漏寫了固定結構中的一個保留字。

下面錯誤打印信息done,這是一個很好的線索。因為這時知道正在處理一個while語句。回溯腳本段,檢查while語句,是否漏寫或錯寫了關鍵字,如do或者正在使用的條件語句。

第二個典型錯誤是漏寫引號錯誤。經常要注意這個問題,因為此錯誤經常出現。這裡給出解決這類錯誤的唯一方案是在腳本中確保所有引號成對出現。

當shell打印出錯誤行後,通常在vi編輯器中查看文件。使用vi的set nu選項調試錯誤,先進入vi,然後點擊< ESC>鍵,後跟一冒號,再鍵入set nu <return>,這時給出文本行號,然後進入shell打印錯誤行。

另一個常見錯誤是在使用-eq語句時忘記在測試條件一邊使用數字取值。

如果得到下列錯誤提示,通常是由於兩件事情:需要在變量和方括號間加空格;在方括號裡漏寫操作符。
[: missing ']'

經驗上講大多數錯誤是由於使用變量時大小寫保持不一致。例如經常在開始定義時用大寫,然後在變量調用時用了小寫字符,這樣難免變量會沒有賦值。

使用for循環時,有時會忘了在循環的列表部分用$符號,特別是在讀取字符串時。

set命令可輔助腳本調試。以下是set命令常用的調試選項:

set-n 讀命令但並不執行。

set-v 顯示讀取的所有行。

set-x 顯示所有命令及其參數。

將s e t選項關閉,只需用+替代-。有人總認為+應該為開,而-應為關閉,但實際剛好相反。可以在腳本開始時將s e t選項打開,然後在結束時關閉它。或在認為有問題的特殊語句段前後打開及關閉它。

下面看一個例子。以下腳本將名字保存在變量列表中。用戶輸入名字, for循環循環變量列表查看是否有匹配模式。注意這裡在腳本開始時使用了set -x,並在結尾部分關閉它。

[root@localhost huangcd]# cat error
#!/bin/bash
set -x
LIST="Peter Susan John Barry Lucy Norman Bill Leslie"
echo -n "Enter your Name:"
read NAME
for LOOP in $LIST
do
if [ "$LOOP" = "$NAME" ]
then
echo "you are on the list,"
break
fi
done
set +x
[root@localhost huangcd]# sh error
+ LIST='Peter Susan John Barry Lucy Norman Bill Leslie'
+ echo -n 'Enter your Name:'
Enter your Name:+ read NAME
Lucy
+ for LOOP in '$LIST'
+ '[' Peter = Lucy ']'
+ for LOOP in '$LIST'
+ '[' Susan = Lucy ']'
+ for LOOP in '$LIST'
+ '[' John = Lucy ']'
+ for LOOP in '$LIST'
+ '[' Barry = Lucy ']'
+ for LOOP in '$LIST'
+ '[' Lucy = Lucy ']'
+ echo 'you are on the list,'
you are on the list,
+ break
+ set +x

Copyright © Linux教程網 All Rights Reserved