1】使用sh –x,使用-x引數能看到指令碼的具體執行過程
2】使用輸出重定向可以將執行過程儲存到另一檔案
3】顯示行號:
在/etc/vimrc檔案中新增行 set nu
然後在要執行的指令碼中新增
trap 'echo "before execute line:$lineno" >/dev/null' debug 【新增位置在#! /bin/sh 之後,真正執行的指令碼之前】
eg:[root@gbackup2 zhaoyj]# head -4 test.sh
#!/bin/sh
trap 'echo "before execute line:$lineno" >/dev/null' debug
adir=backup
for i in fmx1 mx1 mx2 mx14
[root@gbackup2 zhaoyj]# tail -3 /etc/vimrc
set t_sf=m
set nu
endif
4】執行命令
命令模式:sh -x scriptname > 輸出結果 2> 執行過程儲存檔案
或:sh -x scriptname > 輸出結果 2>&1
[root@gbackup2 zhaoyj]#sh -xtest.sh > 245.backup.txt2>log.txt
5】展示執行過程
所有以++開頭的都是提示行,所有已+開頭的都是指令碼行
[root@gbackup2 zhaoyj]# more log.txt
+ trap 'echo "before execute line:$lineno" >/dev/null' debug
++ echo 'before execute line:3'
+ adir=backup
+ for i in fmx1 mx1 mx2 mx14
++ echo 'before execute line:4'
+ for j in dir mysql post qmail
++ echo 'before execute line:6'
++ echo 'before execute line:8'
+ '[' dir '!=' post ']'
++ echo 'before execute line:10'
+ cd /backup/fmx1/dir/
++ echo 'before execute line:11'
+ echo -n 'backup.fmx1.dir '
++ echo 'before execute line:12'
++ echo 'before execute line:12'
+ ls -lt
mysql中執行 儲存過程指令碼
delimiter create procedure myproc out s int begin select count into s from students end delimiter 注釋 和delimiter 一定要分兩行來寫!mysql 預設以 為分隔符,如果沒有宣告分割符,則編譯器...
shell 指令碼檔案追蹤與 debug
scripts 在執行之前,最怕的就是出現語法錯誤的問題了!那麼我們如何 debug 呢?有沒有辦法不需要透過直接執行該 scripts 就可以來判斷是否有問題呢?呵呵!當然是有的!我們就直接以 bash 的相關引數來進行判斷吧!sh或bash nvx scripts.sh 選項與引數 n 不要執行...
shell指令碼批量追蹤ip路由走向
shell指令碼批量追蹤ip路由走向 需求 有大量ip位址需要追蹤路由,檢視是否經過 第三跳經過 192.168.23.2,如不經過,需要顯示不能經過的ip 思路 追蹤路由用traceroute m 4指定4跳即結束,由於到192.168.23.2不到4跳。所以追蹤為4足夠.指令碼如下 for ip...