近來主要搗鼓ubuntu,大多數項目中都用到了sh腳本作為啟動腳本等,以前只是大概明白如何使用,今天需要自己修改並運行腳本就碰到了很多問題,所以決定靜下心來學習一下shell腳本,學習了幾個小時,現將一些要點總結如下,以供以后翻看或者供入門人員參考。
- 第一行
這里指的是腳本第一行,一般腳本第一行都是
#!/usr/bin/env bash
這句話的意思是告訴操作系統用哪個命令來解析腳本,一般不用改變
- 腳本(函數)參數
運行xx.sh 1 2 3后
$*為"1 2 3"(一起被引號包住)
$@為"1" "2" "3"(分別被包住)
$#為3(參數數量)
注:如果以上字符出現在函數里就是函數的輸入
- 控制語句
- if
“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循環
for TIF in $(ls $LAYERS)
do
INPUT=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 或者 ${LAYERNAME}
- 函數
- 定義函數
realpath ()函數中的echo表示返回值,如果有多個echo最終輸出會拼接起來。函數中的$@等表示函數的參數
{
f=$@;
echo "$f"
if [ -d "$f" ]; then
base="";
dir="$f";
else
base="/$(basename "$f")";
dir=$(dirname "$f");
fi;
dir=$(cd "$dir" && /bin/pwd);
echo "$dir$base"
}
-
- 使用函數
只需使用 realpath $LAYERS即可,$LAYERS為變量,realpath后面可以跟任意數量的參數以空格隔開,這些參數可以被realpath中的$@全部接受。其實echo就是個函數
以上就是我所學到的shell腳本編寫語法,不足之處還請大家補充。