天天看點

BASH 指令以及使用方法小結

最近工作中需要寫一個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中的不同内容進行不同的操作。

----------------------------------------------------------------

作者:好大一片雲

部落格位址:http://www.cnblogs.com/zhutianshi/

轉載聲明:可以轉載, 但必須以超連結形式标明文章原始出處和作者資訊及版權聲明,謝謝合作!

BASH 指令以及使用方法小結

This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.

繼續閱讀