歡迎您光臨本站 註冊首頁

shell 腳本調試

←手機掃碼閱讀     火星人 @ 2014-03-08 , reply:0

shell 腳本調試

參數 -x 跟蹤腳本

  1. shell 腳本調試參數 -x
  2. #BASH
  3. [root@74 ~]# bash -x /usr/local/keepalived/haproxy_check.sh
  4. eth1_ip=10.0.100.74
  5. eth0_ip=192.168.57.74
  6. eth1_url=http://10.0.100.74:80
  7. eth0_url=http://192.168.57.74:80
  8. ps -C keepalived --no-header
  9. wc -l
  10. keepalived=0
  11. true
  12. failed=0
  13. curl -IL http://192.168.57.74:80
  14. true
  15. date ' %F_%T'
  16. date=' 2011-12-16_11:57:51'
  17. curl -IL http://192.168.57.74:80
  18. curl -IL http://10.0.100.74:80
  19. check=0
  20. sleep 1
  21. '[' 0 -eq 2 ']'
  22. #同樣SH 也有-x 調試功能,在腳本尾部添加“abc”,然後使用-x 調試該腳本,將返回錯誤信息
  23. [root@74 ~]# sh -x /usr/local/keepalived/haproxy_check.sh
  24. eth1_ip=10.0.100.74
  25. eth0_ip=192.168.57.74
  26. eth1_url=http://10.0.100.74:80
  27. eth0_url=http://192.168.57.74:80
  28. ps -C keepalived --no-header
  29. wc -l
  30. keepalived=0
  31. true
  32. failed=0
  33. curl -IL http://192.168.57.74:80
  34. true
  35. date ' %F_%T'
  36. date=' 2011-12-16_11:56:37'
  37. curl -IL http://192.168.57.74:80
  38. curl -IL http://10.0.100.74:80
  39. check=0
  40. sleep 1
  41. '[' 0 -eq 2 ']'
  42. break 2
  43. break 2
  44. abc
  45. /usr/local/keepalived/haproxy_check.sh: line 40: abc: command not found

使用PS4,更詳細的輸出

  1. [root@74 ~]# export PS4=' {$LINENO:${FUNCNAME[0]}} '
  2. [root@74 ~]# sh -x /usr/local/keepalived/haproxy_check.sh
  3. {6:} eth1_ip=10.0.100.74
  4. {7:} eth0_ip=192.168.57.74
  5. {8:} eth1_url=http://10.0.100.74:80
  6. {9:} eth0_url=http://192.168.57.74:80
  7. {10:} wc -l
  8. {10:} ps -C keepalived --no-header
  9. {10:} keepalived=0
  10. {12:} true
  11. {13:} failed=0
  12. {15:} curl -IL http://192.168.57.74:80
  13. {18:} true
  14. {19:} date ' %F_%T'
  15. {19:} date=' 2011-12-16_12:54:13'
  16. {21:} curl -IL http://192.168.57.74:80
  17. {21:} curl -IL http://10.0.100.74:80
  18. {22:} check=0
  19. {23:} sleep 1
  20. {26:} '[' 0 -eq 2 ']'
  21. {29:} break 2

參數 -n 檢查語法是否錯誤,但不會實際執行命令!

去掉腳本 if 後邊的 then 試試

  1. sh -n /usr/local/keepalived/haproxy_check.sh
  2. /usr/local/keepalived/haproxy_check.sh: line 28: syntax error near unexpected token `else'
  3. /usr/local/keepalived/haproxy_check.sh: line 28: ` else'


其它參數摘自IBM

  1. 使用shell的執行選項,本節將介紹一些常用選項的用法:
  2. -n 只讀取shell腳本,但不實際執行
  3. -x 進入跟蹤方式,顯示所執行的每一條命令
  4. -c "string" 從strings中讀取命令
  5. “-n”可用於測試shell腳本是否存在語法錯誤,但不會實際執行命令.
  6. 在shell腳本編寫完成之後,實際執行之前,首先使用“-n”選項來測試腳本是否存在語法錯誤是一個很好的習慣.
  7. 某些shell腳本在執行時會對系統環境產生影響,比如生成或移動文件等,如果在實際執行才發現語法錯誤,
  8. 您不得不手工做一些系統環境的恢復工作才能繼續測試這個腳本.
  9. “-c”選項使shell解釋器從一個字元串中而不是從一個文件中讀取並執行shell命令.
  10. 當需要臨時測試一小段腳本的執行結果時,可以使用這個選項,如下所示:
  11. sh -c 'a=1;b=2;let c=$a $b;echo "c=$c"'
  12. "-x"選項可用來跟蹤腳本的執行,是調試shell腳本的強有力工具.
  13. “-x”選項使shell在執行腳本的過程中把它實際執行的每一個命令行顯示出來,並且在行首顯示一個" "號.
  14. " "號後面顯示的是經過了變數替換之後的命令行的內容,有助於分析實際執行的是什麼命令.
  15. “-x”選項使用起來簡單方便,可以輕鬆對付大多數的shell調試任務,應把其當作首選的調試手段.

總結摘自IBM

  1. 調試shell腳本的過程:
  2. 首先使用“-n”選項檢查語法錯誤,然後使用“-x”選項跟蹤腳本的執行,使用“-x”選項之前,
  3. 別忘了先定製PS4變數的值來增強“-x”選項的輸出信息,至少應該令其輸出行號信息
  4. (先執行export PS4=' [$LINENO]',更一勞永逸的辦法是將這條語句加到您用戶主目錄的.bash_profile文件中去),這將使你的調試之旅更輕鬆.
  5. 也可以利用trap,調試鉤子等手段輸出關鍵調試信息,快速縮小排查錯誤的範圍,並在腳本中使用“set -x”及“set x”對某些代碼塊進行重點跟蹤.
  6. 這樣多種手段齊下,相信您已經可以比較輕鬆地抓出您的shell腳本中的臭蟲了.

結束


[火星人 ] shell 腳本調試已經有269次圍觀

http://coctec.com/docs/linux/show-post-45971.html