首先在目前目錄下建立一個名為test2.sh的檔案
檔案下面下如下面内容:
#!bin/bash
while :
do
echo "yes hello world"
sleep 1
done
儲存,退出,添加執行權限:chmod +x test2.sh
同理建立一個test.sh
#!bin/bash
while :
do
if [ $(ps -ef | grep "test2" | grep -v "grep" | wc -l) -eq 1 ];then
kill $(ps -ef|grep "test2.sh"|awk '{print $1}')
echo "kill"
sh test2.sh
echo "restart"
else
echo "not found"
fi
sleep 2
done
儲存,推出,添加執行權限
說明:
#!bin/bash:告訴系統該腳本需要用sh來執行
while :無限循環模式,注意while與“:”之間有一個空格!
do:與while一起
if [ $(ps -ef | grep "test2" | grep -v "grep" | wc -l) -eq 1 ];then:
if...then語句,而ps -ef | grep "fd" | grep -v "grep" | wc -l查驗test2程式是否在運作,如果在運作,那麼會傳回所有名字為test2的程式行數,如果沒有在運作的程式,那麼傳回0,
$()表示變量的意思,這裡不能使用下面的文法,否則什麼也得不到!
processNum=$(ps -ef | grep "test2" | grep -v "grep" | wc -l)
if( ${processNum} -eq 1)
正确的文法是:
processNum=ps -ef | grep "test2" | grep -v "grep" | wc -l'
-eq:是相等的意思
這句話整體意思是:如果系統中存在名字為test2的程式,并且隻有一個程式,那麼:
kill $(ps -ef|grep "test2.sh"|awk '{print $1}')
ps -ef|grep "test2.sh"|awk '{print $1}'傳回的是test2.sh的pid,這樣就能讓kill指令使用了!
當然這裡的print $1要按照系統的實際情況來定,可能是第一列($1),也可能是第二列($2),也可能是其他
echo "kill":輸出kill字元
sh test2.sh:test2.sh指令重新開機
else
echo "not found"
與上面的if語句一起使用,如果沒有test2的程式,那麼輸出“not found"
fi:結束if語句
sleep 2:延時兩秒
done:while循環
腳本調試
最簡單的調試方法當然是使用echo指令。你可以在任何懷疑出錯的地方用echo列印變量值,這也是大部分shell程式員花費80%的時間用于調試的原因。Shell腳本的好處在于無需重新編譯,而插入一個echo指令也不需要多少時間。
shell也有一個真正的調試模式,如果腳本”strangescript”出錯,可以使用如下指令進行調試:
sh -x strangescript
7 上述指令會執行該腳本,同時顯示所有變量的值。
shell還有一個不執行腳本隻檢查文法的模式,指令如下:
sh -n your_script
這個指令會傳回所有文法錯誤。