1. 程式人生 > >shell腳本調試

shell腳本調試

roo 適用於 ccf 針對 err 正常 作用域 debug 輔助

1、使用dos2unix命令處理在windows下開發的腳本

將windows下編輯的腳本放置到linux下執行的情況如下:

[root@ks ~]# cat -v nginx.sh 
#!/bin/bash^M
a=1 n^M
sum=0    ^M
while ((a <=50 ))^M
do^M
    ((sum=sum+a)) ^M
    ((a++)) ^M
done^M

[root@ks ~]# sh nginx.sh #執行腳本
: command not found
: command not found
‘ginx.sh: line 4: syntax error near unexpected token `
‘ginx.sh: line 4: `while ((i <=100 ))

在上述的過程中,在windows下開發的腳本,檢查沒有問題。但在linux系統中執行時出現莫名其妙的語法錯誤。這時,最好執行dos2unix格式化一下。

#格式化命令安裝
[root@ks ~]# yum -y install dos2unix
#使用方法
[root@ks ~]# dos2unix nginx.sh 
dos2unix: converting file nginx.sh to UNIX format ...
#再次查看

[root@ks ~]# cat -v nginx.sh
#!/bin/bash
a=1 n
sum=0
while ((a <=50 ))
do
((sum=sum+a))
((a++))
done

提示:^M消失了,說明已正常。windows下代碼的換行符合linux下的不一樣,導致了本例的問題。在windows下開發的腳本或非自己所寫,需要使用dos2unix格式化,防止執行過程中出現錯誤。

2、使用bash命令參數調試

[root@ks ~]# sh [-nvx] nginx.sh

參數說明:
-n:不會執行該腳本,僅查詢腳本語法是否有問題,並給出錯誤提示
-v:在執行腳本時,先將腳本的內容輸出到屏幕上,然後執行腳本。如果有錯誤,也會給出錯誤提示。
-x:將執行的腳本內容及輸出顯示到屏幕上,這是對調試很有用的參數。

註:參數-x是追蹤腳本執行過程一種非常好的方法,他可以在執行前列出所執行的所有程序段。

如果程序段落,在輸出時,最前面會加上+符號,表示程序代碼。

如果執行腳本發生問題(非語法問題時),利用-x參數,就可以知道問題出在哪一行

一般情況下如果是調試邏輯錯誤的腳本,用-x的參數效果更佳。

缺點:加載系統函數庫等很多我們不想查看其整個過程的腳本時,會有太多輸出,導致很難查看所需要的內容。

3、使用echo命令調試

echo命令是最有用的調試腳本的工具之一。一般應在可能出現的問題的腳本重要的部分加入echo命令(在變量讀取或修改操作的前後加入echo命令,並緊挨著退出命令exit)。此調試方法不僅適用於shell,在php、Python語言中經常使用。

範例:

[root@ks ~]# cat  debug.sh
#!/bin/bash
read -p "please input two number:" a b
echo $a $b     #輸出變量,查看獲取的變量值
exit           #退出腳本,不繼續執行腳本。

if (($a < $b))
  then
    echo "$a<$b"
elif (($a == $b))
  then
    echo "$a=$b"
else
    echo "$a>$b"
fi

4、使用set命令調試部分腳本內容

set 命令也可以用於輔助腳本調試。

set命令常用的調試選項:

  • set -n :讀取命令單並不執行
  • set -v :顯示讀取的所有行
  • set -x :顯示所有命令及其參數

提示:通過set -x 命令開啟調試功能,而通過set +x 關閉調試功能。

set命令最大優點是,和bash -x相比,set -x可以縮小調試的作用域。

[root@ks ~]# cat debug.sh

#!/bin/bash
read -p "please input two number:" a b
set -x    #開啟調試
if (($a < $b))
  then
    echo "$a<$b"
elif (($a == $b))
  then
    echo "$a=$b"
else
    echo "$a>$b"
fi
set +x    #結束調試,只針對set -x 和set +x 之間的腳本進行調試

echo "完美"

執行腳本查看調試結果:

[root@ks ~]# sh debug.sh 
please input two number:2 2
+ (( 2 < 2 ))
+ (( 2 == 2 ))
+ echo 2=2
2=2
+ set +x
完美

提示:加了set +x,在運行腳本的時候,無需使用sh -x 。

shell腳本調試