shell--grep命令+正則表達式+基本語法

什麼是正則

正則就是用一些具備特殊含義的符號組合到一塊兒(稱爲正則表達式)來描述字符或者字符串的方法。或者說:正則就是用來描述一類事物的規則。linux

在linux中,通配符是由shell解釋的,而正則表達式則是由命令解釋的,能夠解釋正則的有三種文本處理工具/命令:grep、sed、awk,今天咱們先來熟悉grep。正則表達式

Python也用到正則表達式,與此正則稍有區別,此處講正則,能夠加深咱們的理解。sql

---------------------------------------------------------------------------------shell

grep

參數

-n  :顯示行號
-o  :只顯示匹配的內容
-q  :靜默模式,沒有任何輸出,得用$?來判斷執行成功沒有,即有沒有過濾到想要的內容bash

-l  :若是匹配成功,則只將文件名打印出來,失敗則不打印,一般-rl一塊兒用,grep -rl 'root' /etc 
-A  :若是匹配成功,則將匹配行及其後n行一塊兒打印出來
-B  :若是匹配成功,則將匹配行及其前n行一塊兒打印出來
-C  :若是匹配成功,則將匹配行及其先後n行一塊兒打印出來
--color
-c  :若是匹配成功,則將匹配到的行數打印出來
-E  :等於egrep,擴展
-i  :忽略大小寫工具

-v  :取反,不匹配
-w:匹配單詞spa

下面咱們能夠作些練習:3d

 

 

 

 

-------------------------rest

正則介紹

^ 行首
$ 行尾
. 除了換行符之外的任意單個字符
* 前導字符的零個或多個
.* 全部字符
[] 字符組內的任一字符
[^] 對字符組內的每一個字符取反(不匹配字符組內的每一個字符)
^[^] 非字符組內的字符開頭的行
[a-z] 小寫字母
[A-Z] 大寫字母
[a-Z] 小寫和大寫字母
[0-9] 數字
\< 單詞頭 單詞通常以空格或特殊字符作分隔,連續的字符串被當作單詞
\> 單詞尾blog

? 前導字符零個或一個
+ 前導字符一個或多個

x{m} x出現m次
x{m,} x出現m次至屢次(至少m次)
x{m,n} x出現m次至n次

abc|def 表示abc或def
a(bc|de)f 表示abcf 或 adef

擴展正則:grep -E 或 egrep

 下面是一些練習:

 

 

 

 

 

 

 

 

 ------------------------------------------------------------

基本語法

什麼是shell script

將OS命令堆積到可執行的文件裏,由上至下的順序執行文本里的OS命令 就是腳本了.
再加上些智能(條件/流控)控制,就變成了智能化腳本了.

變量

part1 爲什麼要有變量

程序的運行就是一些列狀態的變量->用變量值的變化去表示

part2 變量命名規則

以字母或下劃線開頭,剩下的部分能夠是:字母、數字、下劃線.

最好遵循下述規範:

1.以字母開頭
2.使用中劃線或者下劃線作單詞的鏈接
3.同類型的用數字區分
4.對於文件最好加上拓展名
例如: sql_bak.tar.gz,log_bak.tar.bz2 

part3 系統變量

set 和 env區別
set:顯示全部變量
env:環境變量

part4 變量賦值

VARNAME=VALUE
echo $VARNAME
刪除變量 unset VARNAME

part5 經常使用系統變量

PATH
PWD
LANG
HOME
HISTSIZE
PS1
IFS
域分隔符 是空格,換行,TAB鍵的合集

 

part6 全局變量與局部變量

[root@MiWiFi-R3-srv ~]# gender='male' #在爹這個位置定義一個局部變量gender
[root@MiWiFi-R3-srv ~]# export money=1000 #在爹這個位置定義一個全局變量money
[root@MiWiFi-R3-srv ~]#
[root@MiWiFi-R3-srv ~]#
[root@MiWiFi-R3-srv ~]# bash #切換到子bash
[root@MiWiFi-R3-srv ~]# echo $gender #在兒子這裏看它爹的局部變量gender,結果爲空->看不到

[root@MiWiFi-R3-srv ~]# echo $money #在兒子這裏看它爹的全局變量money,能夠看到
1000
[root@MiWiFi-R3-srv ~]#
[root@MiWiFi-R3-srv ~]# export hobby='piao' #在兒子這裏定義一個全局變量hobby
[root@MiWiFi-R3-srv ~]# exit #退出,進入爹的bash環境
exit
[root@MiWiFi-R3-srv ~]# echo $hobby #爹是看不到兒子的export的,兒子的兒子能夠看到

[root@MiWiFi-R3-srv ~]#

part6 定義變量名的邊界

[root@MiWiFi-R3-srv ~]# rest_mem=20
[root@MiWiFi-R3-srv ~]# echo ${rest_mem}%
20%

part 7 數據類型

bash中的變量無須聲明,拿來就用.默認的變量都會是字符類型,還能夠有數字類型,普通的腳本,這兩種類型夠用了

運算符

part1 算術運算符

+

-

*

/

%

part2 關係操做

與(())連用

<

>

<=

>=

==

!=

&&

||

test命令相關,[]能夠達到同樣的效果
[root@MiWiFi-R3-srv ~]# x=1
[root@MiWiFi-R3-srv ~]# [ $x -gt 1 ]
[root@MiWiFi-R3-srv ~]# echo $?
0

相關文章
相關標籤/搜索