正則就是用一些具備特殊含義的符號組合到一塊兒(稱爲正則表達式)來描述字符或者字符串的方法。或者說:正則就是用來描述一類事物的規則。linux
在linux中,通配符是由shell解釋的,而正則表達式則是由命令解釋的,能夠解釋正則的有三種文本處理工具/命令:grep、sed、awk,今天咱們先來熟悉grep。正則表達式
Python也用到正則表達式,與此正則稍有區別,此處講正則,能夠加深咱們的理解。sql
---------------------------------------------------------------------------------shell
-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
下面是一些練習:
------------------------------------------------------------
將OS命令堆積到可執行的文件裏,由上至下的順序執行文本里的OS命令 就是腳本了.
再加上些智能(條件/流控)控制,就變成了智能化腳本了.
程序的運行就是一些列狀態的變量->用變量值的變化去表示
以字母或下劃線開頭,剩下的部分能夠是:字母、數字、下劃線.
最好遵循下述規範:
1.以字母開頭
2.使用中劃線或者下劃線作單詞的鏈接
3.同類型的用數字區分
4.對於文件最好加上拓展名
例如: sql_bak.tar.gz,log_bak.tar.bz2
set 和 env區別
set:顯示全部變量
env:環境變量
VARNAME=VALUE
echo $VARNAME
刪除變量 unset VARNAME
PATH
PWD
LANG
HOME
HISTSIZE
PS1
IFS
域分隔符 是空格,換行,TAB鍵的合集
[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 ~]#
[root@MiWiFi-R3-srv ~]# rest_mem=20
[root@MiWiFi-R3-srv ~]# echo ${rest_mem}%
20%
bash中的變量無須聲明,拿來就用.默認的變量都會是字符類型,還能夠有數字類型,普通的腳本,這兩種類型夠用了
+
-
*
/
%
與(())連用
<
>
<=
>=
==
!=
&&
||
test命令相關,[]能夠達到同樣的效果
[root@MiWiFi-R3-srv ~]# x=1
[root@MiWiFi-R3-srv ~]# [ $x -gt 1 ]
[root@MiWiFi-R3-srv ~]# echo $?
0