Linux 第17天 bash,find,正則,命令歷史
時間: 20180803
目錄
腳本測試
$-變量作用
bash的配置文件
忘記的內容回顧
命令歷史
命令歷史調用
bash算術運算help let
管道重定向
正則表達式和擴展表達式元字符
find命令的使用
腳本測試
[ X"$var = X"$var" ] 此種方式可以避免變量出現空值時提示語法錯誤
[ "$name" = "$test"] 此種方式也是為了避免變量出現空值,但是如果兩個變量都空時會為真
[[ "$var" =~ EXPR ]] 支持擴展正則表達式匹配,後邊的正則不可加引號
腳本不支持別名: 腳本內不可以執行命令的別名
read 和用戶交互式為某變量賦值
-p 在為變量賦值時,增加一個提示字符串
-n 指定變量的字符長度,當用戶輸入字符長度達到時自動保存至變量,而不是等到用戶按回車
-s 用戶輸入時不會顯示用戶所輸入的字符,一般用於設置密碼
-d 指定結束符號,當輸入所指定的結束字符時,自動保存字符串至變量中
-t 指定等待時間,當用戶長時間未輸出字符時,自動退出交互界面,變量為空值
$-變量作用
此變量是一個監控變量,可以顯示當前bash的配置情況
echo $- 會顯示一個字符串,每個字符代表bash開啟的功能
h hashall 有此字符表示shell會將命令所在的路徑hash下來,避免每次都要搜索硬盤路徑
通過set +h 將h選項關閉
i interactive-comments 包含這個選項說明當前的shell是一個交互式的shell。所謂的交互
式shell,在腳本中, i選項是關閉的
m monitor 打開監控模式,就可以通過job control來控制進程的停止、繼續、後臺或前臺
執行 bg fg
B braceexpand 大括號{}展開,如果關閉後則大括號將會被當作普通的字符串來識別
H history H選項打開,可以展開歷史列表中的命令,可以通過!執行其歷史命令,
如果關閉後則不可以執行。 set +|- H
bash的配置文件
按生效範圍劃分,存在兩類
全局配置:
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
個人配置:
~/.bash_profile
~/.bashrc
按功能劃分存在兩類
profile類: 為交互式登錄的shell提供配置
全局: /etc/profile /etc/profile.d/*.sh
個人: ~/bash_profile
功用: 定義環境變量 運行命令或腳本
bashrc類: 為非交互式和交互式登錄的shell提供配置
全局: /etc/bashrc
個人: ~/.bashrc
功用: 定義命令別名和函數 定義本地變量
shell登錄時讀取配置文件的順序
交互式登錄
1) 直接通過終端輸入賬號密碼登錄
2) 使用"su - User" 切換的用戶
執行順序: /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile
--> ~/.bashrc --> /etc/bashrc
非交互式登錄
1) su UserName
2) 圖形界面下打開的終端
3) 執行腳本
4) 任何其它的bash實例
執行順序 ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
bash退出任務
當用戶退出登錄時會讀取並執行此文件~/.bash_logout
功用: 創建自動備份 清除臨時文件等
locate 通過數據庫來查找系統裏的文件cent7最小安裝已經廢棄此軟件包mlocate
-i ignore case 忽略字符大小寫
-n 後邊跟一個數值表示顯示所匹配到的前#個文件
-r 後邊可以跟一個基本正則表達式來搜索文件
updatedb 此命令用來更新文件查詢數據庫,如果系統有生成新文件時可以使用此命令來更新
數據庫
忘記的內容回顧
命令歷史
!! 執行上一條命令
!-1 執行上一條命令
!n 執行history命令輸出對應序號n的命令
!-n 執行history命令歷史中倒數每n個命令
!string 重復前一個以"string"開頭的命令
!?string 重復前一個包含"string"的命令
!string:p 僅打印命令,而不執行
!$:p 打印出!$(上一條命令的最後一個參數)的內容
!*:p 打印輸出!*(上一條命令的所有參數)的內容
^string 刪除上一條命令中第一個string
^string^string2 將上一條命令中的第一個string1替換為string2
!:gs/string1/string2 將上一條命令中所有所有string1都替換為string2
歷史命令調用
Ctrl+r 可以搜索包含某個字符串的歷史命令
Ctrl+g 從命令歷史搜索模式退出
command !^ 調用上一條命令的第一個參數作為command的參數
command !$ 調用上一條命令的最後一個參數作為command的參數
command !* 調用上一條命令的全部參數作為command的參數
command !:n 調用上一條命令的第n個參數作為command的參數
command !n:^ 調用第n條命令的第一個參數作為command的參數
command !n:$ 調用第n條命令的最後一個參數作為command的參數
command !n:m 調用第n條命令的第m個參數作為command的參數
command !n:* 調用第n條命令的所有參數作為command的參數
bash算術運算help let
+, -, *, /, %取模, **乘方
實現算術運算的語法
a=5 b=8
1) let c=$a+$b
2) c=$[$a+$b]
3) c=$(($a+$b))
4) c=$(expr $a + $b)
5) echo $a+$b|bc
乘法符號有些場景中需要轉義在其前方加\
管道重定向
> 將標準輸出重定向至文件中覆蓋其原有內容
>> 將標準輸出重定向至文件中但不會覆蓋其原有內容,追加在其之後
2> 將錯誤輸出重定向至文件中覆蓋其原有內容
2>> 將錯誤輸出重定向至文件中但不會覆蓋其原有內容,追加在其之後
&> 將標準和錯誤輸出重定向至文件中覆蓋其原有內容
&>> 將標準和錯誤輸出重定向至文件中但不會覆蓋其原有內容,追加在其之後
2>&1 將錯誤輸出轉至標準輸出
1>&2 將標準輸出轉至錯誤輸出
示例 ls abc >f1 2>&1
正則表達式和擴展表達式元字符
標準正則表達式
字符匹配
. 任意單個字符
[] 匹配括號內任一單個字符
[^] 匹配除了括號內的任一單個字符
[:alnum:] 字母和數字
[:alpha:] 大小寫字母
[:upper:] 大寫字母
[:lower:] 小寫字母
[:digit:] 數字
[:punct:] 標點符號
[:print:] 可打印字符
[:space:] 空格
[:blank:] 空白字符
次數匹配
* 匹配前方字符任意次包含0次
\? 匹配前方字符0或1次
\+ 匹配前方字符至少1次
\{n\} 匹配前方字符n次
\{n,\} 匹配前方字符至少n次
\{n,m\} 匹配前方字符至少n次,最多m次
\{,m\} 匹配前方字符最多m次
位置錨定
^ 行首
$ 行尾
\< or \b 詞首
\> or \b 詞尾
或
\| 表示匹配前邊或後邊的模式之一
分組
\(\) 將一組表達式括起來可以將其用來後向引用
需要註意後向引用是引用前方的分組括號中的模式所匹配的字符,非模式本身
擴展正則表達式
字符匹配
. 匹配任一單個字符
[] 匹配括號內任一單個字符
[^] 匹配除了括號內任意單個字符
次數匹配
* 匹配前方字符任意次包含0次
? 匹配前方字符0或1次
+ 匹配前方字符至少1次
{n} 匹配前方字符n次
{n,} 匹配前方字符到少n次
{n,m} 匹配前方字符至少n次,最多m次
{,m} 匹配前方字符最多m次
位置錨定
^ 匹配行首
$ 匹配行尾
\< or \b 匹配詞首
\> or \b 匹配詞尾
或
| 表示匹配前邊或後邊的模式之一
分組
() 將一組表達式括起來可以將其用來後向引用
基本正則和擴展正則區別
In basic regular expressions the meta-characters ?, +, {, |,
(, and ) lose their special meaning; instead use the backslashed
versions \?, \+, \{, \|, \(, and \).
默認的基本正則?, +, {, |, (, ),在shell中有特殊意義所以在其前方加上\將其
轉義,即不被shell所識別為特殊字符。而擴展正則做了優化使其可以直接使用這些
字符,而不會被shell所識別為特殊含義的字符。
find 搜索文件系統上的文件或文件夾
-maxdepth LEVEL 最大搜索目錄深度,指定目錄為第1級
-mindepth LEVEL 最小搜索目錄深度
-iname 搜索文件名時不區分大小寫
-regex "pattern" 以pattern匹配整個文件路徑字符串,而不僅僅是文件名稱
-empty 搜索空文件或空目錄
fine /app -type d -empty
-perm +|-#
# 表示精確匹配所給的權限
如 -perm 644 則精確匹配文件權限為644的文件或文件夾
/# 表示匹配所給權限中的一組即可
如 -perm /644 則匹配文件權限屬主大於6或屬組大於4或其它大於4的文件或
文件夾
-# 表示匹配所給權限中的每一位
如 -perm -644 則匹配文件權限屬主至少6並且屬組至少為4其它為4的文件或
目錄
/|- 664 110 110 100
/ 110 110 100 表示1關心0不關心有無都可以 每1組之間為或關系
可以匹配的有 777, 600, 060, 004等只要有一組滿足即可
- 110 110 100 表示1關心0不關心有無都可以 每1組之間為與關系
可以匹配的有664, 764, 667, 665等三組權限同時大於664就滿足
-atime # 單位是天
# 表示 [#,#+1) 此種方式用的不多,一般+-用的比較多
如 -atime 5 表示5天前到6天之內被訪問的過的文件
+# 表示 [#+1,無窮大)
如 -atime +5 表示6天(包含每6天)之前被訪問過的文件
-# 表示 (#,now)
如 -atime -5 表示6天之內被訪問過的文件
-ctime
-mtime
-amin # 單位是分鐘
-cmin
-mmin
-size +|- #UNIT
#UNIT (#-1,#]
如5K 表示 (4K,5] 匹配4k-5K大小的文件
-#UNIT [0,#-1]
如-5K 表示 [0,4K] 表示匹配小於等於4K大小的文件
+#UNIT
如+5K 表示 (5K,無窮大) 表示匹配大於5K大小的文件
-prune
查找/etc/下,除/etc/sane.d和/etc/fonts兩個目錄的所有.conf後綴的文件
find /etc \(–path '/etc/sane.d' –o –path '/etc/fonts' \) \
-a -prune –o -name "*.conf"
Linux 第17天 bash,find,正則,命令歷史