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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM