以下這些知識是在編寫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 和 $(( )) 直接進行計算