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 。