BASH命令使用方法詳解

好大一片雲發表於2014-10-24

最近工作中需要寫一個Linux指令碼,用到了很多BASH命令,為了防止以後忘記,在這裡把它們一一記下來。可能會比較亂,隨便看看就好了。如果有說的不對的地方也歡迎大家指正。

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” 會輸出空字元,而echo “\$VAR”會輸出\$VAR。

4,$()

如果需要把一個或一串命令的返回值賦給一個變數,可以用$(),然後把命令放入括號中。例如:

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中的不同內容進行不同的操作。

相關文章