本章內容
- shell函數
- shell正則表達式
1、shell函數
linux shell 可以用戶定義函數,然后在shell腳本中可以隨便調用.
格式:
funname () {
CMD #函數體
}
例子:
#!/bin/bash
fun () {
echo "hello world"
}
fun
...
╭─root@localhost.localdomain ~
╰─➤ bash test8.sh
hello world
return 函數傳參
#!/bin/bash
fun () {
echo "hello world"
return $i
}
for i in {1..4}
do
fun
done
...
╭─root@localhost.localdomain ~
╰─➤ bash test8.sh
hello world
hello world
hello world
hello world
╭─root@localhost.localdomain ~
╰─➤ 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
...
╭─root@localhost.localdomain ~
╰─➤ bash test8.sh
hello world
hello world
hello world
hello world
函數參數
摘自菜鳥教程:https://www.runoob.com/linux/linux-shell-func.html
在Shell中,調用函數時可以向其傳遞參數。在函數體內部,通過 $n 的形式來獲取參數的值,例如,$1表示第一個參數,$2表示第二個參數...
帶參數的函數示例:
#!/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
[test@root]:# bash funWithParam
#輸出結果:
第一個參數為 1 !
第二個參數為 2 !
第十個參數為 10 !
第十個參數為 34 !
第十一個參數為 73 !
參數總數有 11 個!
作為一個字符串輸出所有參數 1 2 3 4 5 6 7 8 9 34 73 !
#注意,$10 不能獲取第十個參數,獲取第十個參數需要${10}。當n>=10時,需要使用${n}來獲取參數。
另外,還有幾個特殊字符用來處理參數:
參數處理
# 說明
$# -->#傳遞到腳本或函數的參數個數
$* --># 以一個單字符串顯示所有向腳本傳遞的參數
$$ -->#腳本運行的當前進程ID號
$! -->#后台運行的最后一個進程的ID號
$@ -->#與$*相同,但是使用時加引號,並在引號中返回每個參數。
$- -->#顯示Shell使用的當前選項,與set命令功能相同。
$? -->#顯示最后命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。
2、正則表達式(基於grep講解)
- 功能就是用來檢索、替換那些符合某個模式(規則)的文本,正則表達式在每種語言中都會有;
- 正則表達式就是為了處理大量的文本或字符串而定義的一套規則和方法
- 通過定義的這些特殊符號的輔助,系統管理員就可以快速過濾,替換或輸出需要的字符串
- Linux正則表達式一般以行為單位處理
基礎正則表達式
符號 | 描述 |
---|---|
. | 匹配任意單個字符(必須存在) |
^ | 匹配以某個字符開頭的行 |
$ | 配以什么字符結尾的行 |
* | 匹配前面的一個字符出現0次或者多次;eg:a*b |
.* | 表示任意長度的任意字符(*號表示前面的.出現0次或多次,.表示任意字符且存在) |
[] | 表示匹配括號內的一個字符(不是字符串) |
[^] | 匹配[^字符]之外的任意一個字符 |
[] | 匹配非[^字符]內字符開頭的行 |
\< | 錨定 單詞首部;eg:\<root |
\> | 錨定 單詞尾部:eg:\>root |
\{m,n\} | 表示匹配前面的字符出現至少m次,至多n次 |
\(\) | 表示對某個單詞進行分組;\1表示第一個分組進行調用 |
擴展正則
- egrep ...
- grep -E ...
- 擴展正則支持所有基礎正則;並有補充
- 擴展正則中{}和[]不用轉義可以直接使用;
符號 | 描述 |
---|---|
+ | 表示前面的字符至少出現1次的情況 |
| | 表示“或” |
? | 表示前面的字符至多出現1次的情況 |