1,export VAR=... 面試
這個命令在Shell下直接運行可使以後運行的腳本也知道這個VAR。可是若是 這個命令在腳本中運行,那麼不影響腳本之外的參數。舉個例子,若是在一個腳本運行以前沒有 VAR這個環境變量,而在腳本中運行了 export VAR=3 這一命令,那麼在腳本結束以後,若是運行 echo $VAR,不會有任何顯示。說明export僅在腳本中有效。正則表達式
2,if ... ; then ...; else ...; fijson
能夠把判斷寫在不一樣行,這樣就不須要「;」號了。if後面跟[],中括號裏面是表達式,表達式與中括號的首尾都須要留一個空格。一個例子來判斷VAR爲空:安全
if [ -z "$VAR" ]; then echo "empty"; else echo "not empty"; fiapp
須要注意的是必須把$VAR的兩頭用雙引號包起來。curl
3,雙引號和單引號url
說到雙引號,它與單引號的區別在於若是引號之間有變量,則必定要用雙引號。由於 BASH不會檢測單引號中的內容,也就是說單引號之中不存在特殊字符。echo '$VAR' 的輸出就是$VAR,在單引號中使用雙引號也沒有任何問題。相反,若是在雙引號中須要打印特殊符號是就須要使用'\'來轉義。好比echo "$VAR" 會輸出空字符,而echo "\$VAR"會輸出\$VAR。spa
4,$()字符串
若是須要把一個或一串命令的返回值賦給一個變量,能夠用$(),而後把命令放入括號中。例如:string
LINES = $(cat filename | wc -l)
5,#!/bin/sh
差點忘了這個比較重要的。這是腳本文件的第一行。用來講明該腳本是用/bin/sh來運行的。這個好像有些人面試的時候喜歡問。。。而後再腳本中註釋一行用#號。不知道有沒有能夠註釋多行的。。。
6,sed 's/abc/cba/'
sed能夠用來作正則表達式的搜索和替換,既能夠針對文本文件,也能夠針對字符串變量。這裏我主要使用的是字符串變量,因此通常格式是這樣的:
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中的不一樣內容進行不一樣的操做。