[RHCE] Bash Script

BASH

在RHEL(Red Hat Enterprise Linux)使用的shell為Bash。撰寫shell script的目的在於將多個shell,搭配正規化、管線命令、資料流導向等功能,達到使用者所希望的目的。類似Windows中的批次檔,讓使用者可以執行一個shell script,便可以完成許多指令。

輸入#touch [檔名.sh] 可建立檔案,副檔名使用sh是為了方便使用者分辨檔案為bash script。接著輸入 #chmod a+x [檔名.sh] 給予檔案可執行的權限。完成後使用 #vim [檔名.sh] 編輯script。在shell檔中,第一行要先宣告#!/bin/bash,表示這是屬於bash的script。

Variable

變數可用$呼叫,例如number = 99,我們可用$number呼叫其值;也可以利用$(shell_command)將shell當成變數,而shell的執行結果就會成為這個變數的值。

For loop

for var in condition #迴圈的執行條件,當var滿足condition,就執行迴圈。
do
        script #每次迴圈中所要執行的script。
done

If else

if condition #判斷條件
then
        script1 #若判斷條件為真所執行的script。
else
        script2 #若判斷條件為假所執行的script。
fi

Test

test可用於取得比較式的ture/false值,用法為test 比較式 或者 test [ 比較式 ] (注意比較式前後各有一個空格)。常用的比較式有以下:

字串 #test [參數] [string],可用參數有:
-n: 字串常度不為0。
-z: 字串長度為0。

字串比較 #test [string1] [參數] [string2],可用參數有:
==: 等於。
!=: 不等於。
<: 小於。
>: 大於。
<=: 小於等於。
>=: 大於等於。

邏輯判斷 #test [condition1] [參數] [condition2],可用參數有:
-o: OR。
-a: AND。
!: NOT。

數字比較 #test [number1] [參數] [number2],可用參數有:
-eq: 等於。
-ne: 不等於。
-lt: 小於。
-gt: 大於。
-le: 小於等於。
-ge: 大於等於。

檔案狀態 #test [參數] [filename],可用參數有:
-e: 檔名是否存在。
-f: 檔名是否為檔案。
-d: 檔名是否為目錄。
-r: 檔名是否可讀。
-w: 檔名是否可寫。
-x: 檔名是否可執行。
-s: 檔名是否存在且為非空白檔案。


Argument

shell後可帶入引數,可以讓shell在不用修改script的狀況下做出更多判斷,例如#/path/shellname.sh [opt1] [opt2] [opt3],在這個shell執行的時候,內部的script就可以用$1, $2, $3來取得opt1, opt2, opt3這三個引數。

Diff

#diff [參數] [file1] [file2] 可以用來比較兩個檔案的內容,並列出不相同的內容。
-c: 顯示不相同內容附近幾行的內容。
-u: 輸出結果為標準內容。
-r: 以遞迴的方式比較目錄中的檔案內容。
-N: 可新增patch file,給patch指令使用。

Grep

#grep [參數] [string] [filename] 可在檔案中尋找指定的字串。
-i: 搜尋時忽略大小寫。
-n: 搜尋結果中加上行號。
-r: 遞迴尋找。
-c: 列出符合的行的總數。
-v: 列出不包含字串的所有行。
-l: 列出符合的檔案名稱。

Cut

#cut [參數] [filename] 可以指定分欄,將檔案內容切割顯示。
-d: 指定以什麼字元分割欄為,如-d ‘:’,表示以:分欄。
-f: 指定列出第幾欄,如-f 3,表示列出第三欄
-c: 列出多少字元,如-c 12-20,表示列出每行第12至20個字元。

Head

#head [參數] [filename] 可列出檔案前幾行的內容,若不加參數則會列出前10行。
-n: 指定要列出的行數,如-n 3,表示列出前三行。

Tail

#tail [參數] [filename] 可列出檔案後幾行的內容,若不加參數則會列出後10行。
-n: 指定要列出的行數,如-n 3,表示列出後三行。
-f: 持續顯示檔案更新內容,可用於監控log檔。

Wc

#wc [參數] [filename] 可用以統計檔案內的字元資訊,預設是計算行數、字數、以及位元數。
-l: 計算行數。
-w: 計算字數。
-c: 計算位元數。
-m: 計算字元數。


Sort

#sort [參數] [filename] 可以用以排序資料、檔案。
-n: 以數字排序。
-t: 指定分欄符號,如-t ‘:’,表示以:分欄。
-k: 以第幾欄排序。


Unig

#unig [參數] [filename] 可用以判斷檔案中是否有重複內容。
-u: 顯示無重複的行內容。
-d: 顯示有重複的行內容。
-c: 顯示重複次數。

Tr

#tr ‘[char1]’ ‘[char2]’ 可將字元char1置換成char2

Sed

#sed [參數] ‘[位置] [command/old/new/flag]’ [filename] 可用還置換字串,此指令使用在檔案上時會改變檔案的內容。

例如 #sed ’10,35 s/old/new/gi’ test.txt 會將檔案中第10-35行的old字串換成new字串。
command s: 搜尋/取代。
command d: 刪除。
flag g: 取代整篇文章,不加flag g只會取代第一個。
flag i: 忽略大小寫。

留言