1. 程式人生 > >Linux 第17天 bash,find,正則,命令歷史

Linux 第17天 bash,find,正則,命令歷史

小寫字母 最大 空值 att 臨時文件 文件權限 nts 數值 交互式登錄

Linux 第17天

時間: 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,正則,命令歷史