shell小記

很久沒寫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死人了!




發佈了30 篇原創文章 · 獲贊 3 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章