標籤:style http io os ar 使用 sp 檔案 on
1,export VAR=...
這個命令在Shell下直接運行可以使之後啟動並執行指令碼也知道這個VAR。但是如果 這個命令在指令碼中運行,那麼不影響指令碼以外的參數。舉個例子,如果在一個指令碼運行之前沒有 VAR這個環境變數,而在指令碼中運行了 export VAR=3 這一命令,那麼在指令碼結束之後,如果運行 echo $VAR,不會有任何顯示。說明export僅在指令碼中有效。
2,if ... ; then ...; else ...; fi
可以把判斷寫在不同行,這樣就不需要“;”號了。if後面跟[],中括弧裡面是運算式,運算式與中括弧的首尾都需要留一個空格。一個例子來判斷VAR為空白:
if [ -z "$VAR" ]; then echo "empty"; else echo "not empty"; fi
需要注意的是必須把$VAR的兩頭用雙引號包起來。
3,雙引號和單引號
說到雙引號,它與單引號的區別在於如果引號之間有變數,則一定要用雙引號。因為 BASH不會檢測單引號中的內容,也就是說單引號之中不存在特殊字元。echo ‘$VAR‘ 的輸出就是$VAR,在單引號中使用雙引號也沒有任何問題。相反,如果在雙引號中需要列印特殊符號是就需要使用‘\‘來轉義。比如echo "$VAR" 會輸出Null 字元,而echo "\$VAR"會輸出\$VAR。
4,$()
如果需要把一個或一串命令的傳回值賦給一個變數,可以用$(),然後把命令放入括弧中。例如:
LINES = $(cat filename | wc -l)
5,#!/bin/sh
差點忘了這個比較重要的。這是指令檔的第一行。用來說明該指令碼是用/bin/sh來啟動並執行。這個好像有些人面試的時候喜歡問。。。然後再指令碼中注釋一行用#號。不知道有沒有可以注釋多行的。。。
6,sed ‘s/abc/cba/‘
sed可以用來做Regex的搜尋和替換,既可以針對文字檔,也可以針對字串變數。這裡我主要使用的是字串變數,所以一般格式是這樣的:
TEMP=$(echo $SVAR | sed ‘s/.*\(regex\).*/\1/‘)
這樣就可以在變數SVAR中找到對應regex的內容,然後把它提取出來。 regex兩邊的 \( 和 \) 用來把regex對應的內容形成一個組(group),然後 \1 表示把SVAR的所有內容替換成第一組的內容,也就是regex能夠match的那一部分。如果找不到與regex對應的部分,那麼返回的是SVAR的所 有內容。
7,"${VAR/"substring"}" = "$VAR"
上述等式可以用來判斷一個字串中是否存在substring。如果相等則說明不存在。因為等式左邊會返回從找到的第一個substring開始的子字串,只有當不存在substring時才會返回原字串。
8,curl
curl是一個非常強大的用來發送http請求的命令。我只用到了一些參數,如
-s 表示靜默運行,不顯示curl命令的速度,完成情況,錯誤等statistics
-S 通常與 -s 一起用,表示當有錯誤的時候顯示出來
-k 當需要發送https請求時,加上這個表示允許不安全請求
-X 後面跟要求方法,如POST, PUT, DELETE。如果是GET的話就不用了,因為這是預設操作
-H 後面跟頭部參數,一個curl命令可以使用多個 -H 來定義多個參數
-d 後面跟body,必須使用單引號開始和結束
所以一個curl命令可能看上去是這樣的:
curl -sS -H ‘Content-Type:application/json‘ -d ‘{"name":"‘$VAR‘"}‘ http://www.where.com
需要注意的是在body中使用變數的話,需要先用一個單引號結束上一個單引號的控制範圍,再在這個變數之後用一個單引號與後面的單引號作對應。
9,定義方法
在指令碼中是可以定義function的。具體形式可以是:
func(){
...
}
定義時不需要寫明輸入參數有哪些,因為在方法裡面可以直接擷取並使用這個方法或者命令後面跟的參數。例如:
func abc 30
那麼$1 就是abc,$2 就是30。如果有更多輸入參數,那麼可以使用$3,$4,。。。一直下去。
方法也可以有傳回值,如
func() {
...
return 35
}
那麼 func abc 30 運行之後,$?中存的就是35。
10, tr
可以用來把字串中的某一個字元改成另一個字元,所以就可以用來做字串的切分。例如有一個字串SVAR="a,b,c"。通過命令:
arr=$(echo $SVAR | tr "," "\n")
就可以把一個字串變成三個。
11,字串操作
字串尾部添加字元:SVAR=$SVAR‘abc‘ 就可以在SVAR原本的字串後面添加abc三個字元
字串刪除尾部最後一個字元:SVAR=${SVAR%?}
12,case "$VAR" in
a)
...
;;
b)
...
;;
*)
...
;;
esac
這個就類似C語言中的switch,對VAR中的不同內容進行不同的操作。
BASH 命令以及使用方法小結【轉】