很久沒寫shell,今天要寫個監控腳本,還是shell來得快,於是撿起來。
需求非常簡單,對於htdocs目錄,遞歸地遍歷每個子目錄,並對其中每一個php文件進行代碼語法檢查,以保證系統健康。
1、shell函數
非常簡單,用不用function這個關鍵字聲明無所謂,函數名後有沒有括號也無所謂,但還是加上好了,便於別人閱讀
與其他語言不同,函數名後不必跟參數列表,調用時和命令行調用一下,直接函數名後面寫就OK
function check() {
if [ $# -eq 1 ]; then
echo $1
fi
}
check aaa
2、shell的控制語句
1)shell的比較,字符串間的比較用=,整數間的比較用-eq,這個-不可少哦,否則報語法錯誤,還有就是字符串比較時雖然用“=”,但這個“=”號兩邊必須要有空格,否則就變成賦值語句了,即if裏的條件返回值永遠會是真, 這個鼓搗了半天,汗。。。
正確寫法:
if [ "$RES" != "No“ ]
2)if後的[和],兩邊都要有空格,吃過這個虧,所以這次沒犯
3)for lf in /file/*,查看/file目錄下所有文件,也曾想用for lf in ·ls /file·,但這樣返回的只是文件名,而我需要的是全路徑加文件名
3、shell的字符串操作
想要一個判斷,即文件名是否.php結尾,因文件名是現成的,所以優先選擇字符串截取,有幾種方式
1)${varname:offset:len},例:
varname="abc"
echo ${varname:1:2} //bc
但我想從後往前截的,於是看網上說可將offset置爲負數,試了一下echo ${varname:-1} ,返回的是"abc",看來不符合需求
2)${varname##*string},例
varname="abc.php"
echo ${varname##*.} // php,符合需求了。
類似的還有${varname#*string} ${varname%%*string} ${varname%*string} 有興趣用到時可看下
3)if [[ $F == *.php ]] ,這個最簡單直接了,判斷$F是否是以.php結尾,但要注意這裏雙”[“”]“哦
4、調試
加上-n參數,檢查語法錯誤,加上-x參數,可以看到程序執行時的每條命令,還是非常好的!不然echo死人了!