近來主要搗鼓ubuntu,大多數專案中都用到了sh指令碼作為啟動指令碼等,以前只是大概明白如何使用,今天需要自己修改並執行指令碼就碰到了很多問題,所以決定靜下心來學習一下shell指令碼,學習了幾個小時,現將一些要點總結如下,以供以後翻看或者供入門人員參考。
這裡指的是指令碼第一行,一般指令碼第一行都是
#!/usr/bin/env bash
這句話的意思是告訴作業系統用哪個命令來解析指令碼,一般不用改變
執行xx.sh 1 2 3後$*為"1 2 3"(一起被引號包住)
$@為"1" "2" "3"(分別被包住)
$#為3(引數數量)
注:如果以上字元出現在函式裡就是函式的輸入
「if」 表示式如果條件為真則執行then後面的部分:
if ….; then
elif ….; then
else
fi大多數情況下,可以使用測試命令來對條件進行測試。比如可以比較字串、判斷檔案是否存在及是否可讀等等…
通常用」 [ ] 「來表示條件測試。注意這裡的空格很重要。要確保方括號的空格。
[ -f "somefile" ] :判斷是否是乙個檔案
[ -x "/bin/ls" ] :判斷/bin/ls是否存在並有可執行許可權
[ -n "$var" ] :判斷$var變數是否有值
[ "$a" = "$b" ] :判斷$a和$b是否相等
[ -d "$f" ] 判斷f這個變數的值是否是個資料夾
for tif in $(ls $layers)doinput=file:$($layers/$tif)
echo $input
done
ls $layers表示列出資料夾下所有檔案,所以這是個集合,for迴圈遍歷集合裡所有檔案,tif為迴圈變數
&&意思是如果左邊成立執行右邊相當於與
如:dir=$(cd "$dir" && /bin/pwd);這句話的意思是如果cd dir變數的值沒有錯誤即dir變數所代表的資料夾路徑正確,則執行/bin/pwd,即輸出全路徑
[ -f "/etc/shadow" ] && echo 「this computer uses shadow passwors」 [ ]裡面表示一種判斷
layername="srtm"
無需申明但是=前後不能有空格,使用的時候$layername 或者 $
realpath ()函式中的echo表示返回值,如果有多個echo最終輸出會拼接起來。函式中的$@等表示函式的引數
只需使用 realpath $layers即可,$layers為變數,realpath後面可以跟任意數量的引數以空格隔開,這些引數可以被realpath中的$@全部接受。其實echo就是個函式以上就是我所學到的shell指令碼編寫語法,不足之處還請大家補充。
SHELL指令碼學習指南 學習心得20110924
p117 bin sh 從標準輸入讀取文字流,再輸出出現頻率最高的前n 預設值 25 個單詞的列表 附上出現頻率的計數,按照這個計數由大而小排列 輸出到標準輸出。argument wf n tr cs a za z n tr a z a z sort uniq c sort k1,1nr k2 se...
學習心得 python學習心得
自從來了深圳工作以後,尤其是屢屢面試碰壁以後。發現其實自己的知識面很窄,做筆試題的時候絞盡腦汁還是漏洞百出,並不是不會做,而是出現一大堆不該有的失誤。每次被問道,對資料庫了解嗎?說一大堆看起來很高階的東西 好啊,那我們寫幾個sql語句吧。馬上完蛋了,沒了手冊關鍵字都記不起。了解哪幾種指令碼語言,sh...
shell指令碼攻略學習心得 第一章
export可以匯出環境變數和設定環境變數 path 這個環境變數的作用時,在終端輸入命令後會在 path中依次查詢相關命令執行 獲得字串長度echo echo uid如果等於0則說明當前使用者是超級使用者 檔案描述符 通過重定向可以將命令的輸出從列印到螢幕到列印到檔案 0 stdin 標準輸入 1...