shell函式及其正則表示式
技術標籤:shell
1、shell函式
linux shell 可以使用者定義函式,然後在shell指令碼中可以隨便呼叫.
格式:
funname () {
CMD #函式體
}
例子:
#!/bin/bash
fun () {
echo “hello world”
}
fun
…
bash test8.sh
hello world
return 函式傳參
#!/bin/bash
fun () {
echo “hello world”
return $i
}
for i in {1…4}
do
fun
done
…
bash test8.sh
hello world
hello world
hello world
echo $?
4
return 在函式中定義狀態返回值
返回並終止函式
返回的只能是 0-255 的數字,類似於 exit
#!/bin/bash
fun () {
echo “hello world”
return $i
echo “how beautiful!”
}
for i in {1…4}
do
fun return
done
…
bash test8.sh
hello world
hello world
hello world
hello world
函式引數
摘自菜鳥教程:https://www.runoob.com/linux/linux-shell-func.html
帶引數的函式示例:
#!/bin/bash
author:菜鳥教程
url:www.runoob.com
funWithParam(){
echo “第一個引數為 $1 !”
echo “第二個引數為 $2 !”
echo “第十個引數為 $10 !”
echo “第十個引數為 ${10} !”
echo “第十一個引數為 ${11} !”
echo “引數總數有 $# 個!”
echo “作為一個字串輸出所有引數 $* !”
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
#輸出結果:
第一個引數為 1 !
第二個引數為 2 !
第十個引數為 10 !
第十個引數為 34 !
第十一個引數為 73 !
引數總數有 11 個!
作為一個字串輸出所有引數 1 2 3 4 5 6 7 8 9 34 73 !
#注意,
10
不
能
獲
取
第
十
個
參
數
,
獲
取
第
十
個
參
數
需
要
10 不能獲取第十個引數,獲取第十個引數需要
10不能獲取第十個參數,獲取第十個參數需要{10}。當n>=10時,需要使用${n}來獲取引數。
另外,還有幾個特殊字元用來處理引數:
引數處理
說明
$# -->#傳遞到指令碼或函式的引數個數
$* --># 以一個單字串顯示所有向指令碼傳遞的引數
$$ -->#指令碼執行的當前程序ID號
$! -->#後臺執行的最後一個程序的ID號
KaTeX parse error: Expected 'EOF', got '#' at position 7: @ -->#̲與*相同,但是使用時加引號,並在引號中返回每個引數。
$- -->#顯示Shell使用的當前選項,與set命令功能相同。
$? -->#顯示最後命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。
2、正則表示式(基於grep講解)
功能就是用來檢索、替換那些符合某個模式(規則)的文字,正則表示式在每種語言中都會有;
正則表示式就是為了處理大量的文字或字串而定義的一套規則和方法
通過定義的這些特殊符號的輔助,系統管理員就可以快速過濾,替換或輸出需要的字串
Linux正則表示式一般以行為單位處理
基礎正則表示式
符號 描述
. 匹配任意單個字元(必須存在)
^ 匹配以某個字元開頭的行
$ 配以什麼字元結尾的行
- 匹配前面的一個字元出現0次或者多次;eg:ab
. 表示任意長度的任意字元(*號表示前面的.出現0次或多次,.表示任意字元且存在)
[] 表示匹配括號內的一個字元(不是字串)
[^] 匹配[^字元]之外的任意一個字元
[] 匹配非[^字元]內字元開頭的行
< 錨定 單詞首部;eg:<root
> 錨定 單詞尾部:eg:>root
{m,n} 表示匹配前面的字元出現至少m次,至多n次
() 表示對某個單詞進行分組;\1表示第一個分組進行呼叫
擴充套件正則
egrep …
grep -E …
擴充套件正則支援所有基礎正則;並有補充
擴充套件正則中{}和[]不用轉義可以直接使用;
符號 描述
- 表示前面的字元至少出現1次的情況
| 表示“或”
? 表示前面的字元至多出現1次的情況