天天看點

鞏固shell基礎知識

以下這些知識是在編寫shell程式的時候要用到的,需要的時候可以來查查,來鞏固一下吧

shell中的一些擴充字元

• !! 上個指令的所有字元

• !* 一個指令的所有參數

• !^ 上一條指令的第一個參數

• !$ 上一條指令的最後一個參數

• !:3 上一條指令的第3個參數

• !:0 指令

• !:x x訓示 可以是^ $ x-y * x*(第x個起) x-(不包括$) % n 0

• !n history中的第n條指令,-n表示最後倒數的。

• !?xxx 包含xxx的最後一個指令

• !xxx xxx開頭的最後一個指令

• ^string1^string2^ 快速替換。重複上一條指令,将 string1 替換為 string2. 與 ``!!:s/string1/string2/''

修飾符 (Modifiers)

可選的 word 訓示器之後,可以出現一個或多個下述 modifiers 的序列,每一個都字首有 `:'。

h 删除檔案名組成的尾部,隻保留頭部(路徑)。

t 删除檔案名組成中前面的成分,保留尾部(檔案)。

r 删除 .xxx 形式中尾部的字尾成分,保留基本名稱部分。

e 删除所有内容,保留尾部的字尾。

p 列印新的指令,但是不執行它。

q 引用替換所得的詞,使它不再進行替換。

x 引用替換所得的詞,類似與 q, 但是會根據 blanks,空白 和新行符分解為詞。

s/old/new/

将事件行中出現的第一個 old 替換為 new。 任何分隔符都可以用來代替

/,最後一個分隔符是可選的,如果它是事件行的最後一個字元。 old 和 new 中的分隔符可以用一個反斜杠來引用。如果 &

出現在 new 中,它将替換為 old。 可以用單個反斜杠來引用 &。如果 old 為空,它将設定為最後替換的 old,

或者,如果前面沒有發生過曆史替換,就是 !?string[?] 搜尋中的最後一個 string。

& 重複上一次替換。

g 使得改變被整個事件行所接受。用于與 `:s' 或 `:&' 結合 (例如,`:gs/old/new/')。 如果與 `:s'

結合使用,任何分隔符都可以用來代替 /, 最後一個分隔符是可選的,如

果它是事件行的最後一個字元。

$ mv foo.{jpeg,jpg}

這個指令将把foo.jpeg改名為foo.jpg。

bash腳本的參數

$0:腳本名字。此變量包含位址,可以使用basename $0獲得腳本名稱。

$1:第一個參數

$2,$3,$4,$5,…一次類推。

$# 傳遞到腳本的參數個數

$* 以一個單字元串顯示所有向腳本傳遞的參數

$$ 腳本運作的ID号

$! 背景運作的最後一個程序的ID号

$@ 與$#相同,但是使用時加引号,并在引号中傳回每個參數。

$- 顯示shell使用的目前選項。

$? 顯示最後指令的推出狀況。0表示沒有錯誤。

================================================

1.得到字元串長度

☎ echo ${#variable}

☎ expr length “$variable”

☎ expr “$variable” : “.*”

e=www; a=e; echo ${!a}; eval echo \$$a

2.查找字元串子串位置

☎ expr index “$variable” “substring”

3.得到字元串子字元串

☎ echo ${variable:position:length}

☎ expr substr “$variable” startposition length

4.比對正規表達式之比對長度

expr match “$x” “this”

☎ expr match “$x” “string”

5.字元串的掐頭去尾

☎ echo ${variable#startletter*endletter} # #表示掐頭,因為鍵盤上#在$前面,一個表示最小比對

☎ echo ${variable##tartletter*endletter} 兩個表示最大比對

☎ echo ${variable%startletter*endletter} # %表示去尾,因為鍵盤上%在$後面,一個表示最小比對

☎ echo ${variable%%startletter*endletter} 兩個表示最大比對

6.字元(串)的替換

☎ echo ${variable/oldletter/newletter} #替換一個

☎ echo ${variable//oldletter/newletter} #替換所有

7。測試變量是否已經指派

${variable:-value}

如果變量已經指派,則使用該變量值。如果變量為空,則使用value。需要注意的是,value并不賦給variable。

${variable:=value}

該表達式上面的差別就是,如果variable為空,則value賦給variable。

${variable:?”customed message “}

變量是否為空,如果為空的話則顯示帶有系統錯誤資訊

Bash 測試和比較函數

test expr 和 [ expr ] 是等價的。

☎ test 3 -gt 4 && echo True || echo false

false

必須用 \ 加以轉義

☎ [ “abc” \< “def” ];echo $?

-a 和 -o 選項使用邏輯運算符 AND 和 OR

☎ [ ! \( “a” = “$HOME” -o 3 -lt 4 \) ]; echo $?

1

不需要對 (( 和 )) 之間的操作符轉義

(( w=(y/x) + ( (~ ++x) & 0×0f ) )); echo $? $x $y $w

用 [[ 複合指令,進行通配符測試,包含算術測試

( -d “$HOME” ) && ( -w “$HOME” ) && echo “home is a writable directory”

“abc def d,x” == a[abc]*\ ?d* ; echo $?

| a -gt 2 ; echo $?

在 shell 中用 echo 和 $(( )) 直接進行計算