shell函數linux
shell中容許將一組命令集合或語句造成一段可用代碼,這些代碼塊稱爲shell函數。給這段代碼起個名字稱爲函數名,後續能夠調用該段代碼。正則表達式
格式:shell函數很簡單,函數名後跟雙括號,在跟雙大括號。經過函數名直接調用,不加小括號shell
func () { #指定函數名bash
command #函數體函數
}blog
實例:1字符串
#!/bin/bashit
func () {table
echo "這裏是怪人的地盤"test
}
func
bash test.sh
這裏是怪人的地盤
實例:2
函數返回值
#!/bin/bash
func () {
VAR=$((1+1))
return $VAR
echo "這裏是怪人的地盤"
}
func
echo $?
bash test.sh
2
return 在函數中定義狀態返回值,返回並終止函數,單反毀的只能是0-255的數字,相似於exit
實例:3
函數傳參
#!/bin/bash
func () {
echo "Hello $1"
}
func world
bash test.sh
Hello world
經過shell位置參數給函數傳參
shell正則表達式
正則表達式在每種語言中都有,功能就是匹配符合你預期要求的字符串
shell正則分爲兩種:
基礎正則表達式
擴展正則表達式:+ ? | ()
1.正則表達式就是爲了處理大量的文本|字符串而定義的一套規則和方法
2.經過定義的這些 特殊符號的輔助,系統管理員就能夠快速過濾,替換或輸出須要的字符串,linux正則表達式通常以行爲單位處理
正則表達式和通配符的本質區別
1.不須要思考的判斷方法,在三劍客awk,sed,grep中都是正則,其餘的都是通配符
2.區別通配符和正則表達式最簡單的方法
(1)匹配文件目錄名====》通配符
(2)匹配文件內容====》正則表達式
以grep爲例舉例說明正則表達式
注意:在匹配模式中必定要加上引號
符號 | 描述 | 實例 |
. | 匹配單個必須存在的字符 | l..e 能夠表示 love like leee 不能夠表示的 labcde le lee |
^ | 匹配以「」開頭的行 | 匹配以 abc 開頭的行: echo -e "abc\nxyz" |grep ^abc |
$ | 匹配以「」結尾的行 | 匹配以 xyz 結尾的行: echo -e "abc\nxyz" |grep xyz$ |
* | 前面字符出現零到屢次 | a* 表示出現任意個a的狀況 a*b 表示b前面有任意個a的狀況(包括沒有a的狀況) |
.* | 表示任意字符出現零到屢次 | 過濾出一行中a在前,b在後的行 條件: 包含 a 和 b 字母 a 必須在 b前面 # grep --color "a.*b" b.txt |
+(擴展正則) | 表示前面字符出現至少一次 | 匹配 abc 和 abcc: echo -e "abc\nabcc\nadd" |grep -E 'ab+' 匹配單個數字:echo "113" |grep -o '[0-9]' 連續匹配多個數字:echo "113" |grep -E -o '[0-9]+' |
?(擴展正則) | 表示前面字符最多出現一次 | 匹配 ac 或 abc: echo -e "ac\nabc\nadd" |grep -E 'a?c' |
[] | 表示範圍內的一個字符 | 例子:過濾出包含小寫字母的行 grep [a-z] a.txt 例子:過濾出包含大寫字母的行 grep [A-Z] a.txt 例子:過濾出包含數字的行 grep [0-9] a.txt 例子:過濾出包含數字和小寫字母的行 grep [0-9a-z] a.txt 例子:過濾出包含字母asf的行 grep [asf] a.txt |
[.-.] | 匹配括號中的任意一個字符 | 匹配全部字母 echo -e "a\nb\nc" |grep '[a-z]' |
[^] | 匹配除了某字符的任意一個字符 | 匹配 a 或 b: echo -e "a\nb\nc" |grep '[^c-z]' 匹配末尾數字:echo "abc:cde;123" |grep -E '[^;]+$' |
^[^] | 匹配除了某字符開頭的行 | 匹配不是#開頭的行: grep '^[^#]' /etc/httpd/conf/httpd.conf |
{n}或{n,} | {n}:表示嚴格匹配n個字符 {n,}:表示花括號錢的字符至少存在n個 |
echo "aadadccc" | egrep "a{2}" echo "aadadccc" | egrep "a{1}" |
{n,m} | 匹配字符至少出現n次,最多出現m次 |
"ac\{2,5\}b" 匹配a和b之間有最少2個c最多5個c的行 "ac\{,5\}b" 匹配a和b之間有最多5個c的行 "ac\{2,\}b" 匹配a和b之間有最少2個c的行 |
\< | 錨定單詞首部(匹配字符必須以錨定字符開頭) | # echo "hi,root,iamroot" | grep "\<root" hi,root,iamroot |
\> | 錨定單詞尾部(匹配字符必須以錨定字符結尾) | # echo "hi,root,iamroot" | grep "root\>" hi,root,iamroot |
() | \1 調用前面的第一個分組 | 例子:過濾出一行中有兩個相同數字的行 # grep "\([0-9]\).*\1" inittab 例子:過濾出行首和行位字母相同的行 # grep "^\([a-z]\).*\1$" inittab |
|(擴展正則) | 匹配 | 兩邊的任意一個 | 過濾出cat 或者Cat # grep "cat|Cat" a.txt # grep "(C|c)at" a.txt |
1、字符匹配
.
[]
[^]
2、次數匹配
*
\{m,n\}
3、錨定
^
$
\<
\>
4、分組
\(\)
\1
grep -E
egrep
1、字符匹配
.
[]
[^]
2、次數匹配
*
{m,n}
+ 表示其前面的字符出現最少一次的狀況
?表示其前面的字符出現最多一次的狀況
3、錨定
^
$
\<
\>
4、分組
()
\1
\2
5、或
|
一.、正則表達式中的{}以及()都須要加上\進行轉義,而擴展正則表達式不須要
二 、|, ?,+是擴展正則獨有的
3、 錨定單詞首部和尾部在擴展正則以及正則中都須要加上\