1. 程式人生 > >linux學習第4天(自習)

linux學習第4天(自習)

sock 執行命令 設備文件 長度 inode upd 精準 pan 自身

linux學習第4天(自習)

時間: 20180719


目錄

bash 變量類型

bash 的配置文件

shell登錄類型

bash 中的算術運算

bash 中的條件測試

bash 腳本語句控制

grep和正則表達式

基本正則表達式元字符

擴展正則表達式元字符

文件查找 find, locate



bash 變量類型

根據變量的生效範圍等標準可分為

本地變量

生效範圍為當前shell進程,對當前shell之外的其它shell進程包括當前

shell的子進程均無效

環境變量

生效範圍為當前shell進程及子進程

局部變量

生效範圍為當前shell進程中某代碼片段(通常指函數)

位置變量

$1,...,$n{10}來表示,用於放置在腳本代碼中調用過命令行傳遞給它的參數

特殊變量

$? 上一個命令執行後返回的執行狀態碼(執行成功或失敗)

$0 表示命令本身

$# 傳遞給腳本參數的個數

$* 傳遞給腳本的所有參數,全部參數在下次引用時會合成一個參數

$@ 傳遞給腳本的所有參數,全部參數在下次引用時每個參數都是獨立的


set 顯示已經定義的所有變量


unset 銷毀已經定義的變量


變量命令法則

1 不能使用程序中的保留字: 如if, for 等

2 只能使用數字、字母及下劃線,且不能以數字開頭

3 要做到見名知意



bash 的配置文件

按照生效範圍劃分,存在兩類

全局配置文件:

/etc/profile

/etc/profile.d/*.sh

/etc/bashrc

個人配置文件

~/.bash_profile

~/.bashrc


profile 為交互式登錄的shell提供配置

功用 定義環境變量

運行命令或腳本

bashrc 為非交互式登錄的shell提供配置

功用 定義命令別名

定義本地變量



shell登錄類型

交互式

直接通過終端輸入賬號和密碼登錄,使用su -l USERNAME 或 su - USERNAME


讀取配置文件順序

/etc/profile --> /etc/profile.d/*.sh --> ~/bash_profile -->

~/.bashrc --> /etc/bashrc


非交互式

使用su USERNAME 或者通過圖形界面下打開的終端,讀取配置文件順序

~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh



bash中的算術運算

1 let Var_name=EXPRESSION

2 $[EXPRESSION]

3 $((EXPRESSION))

4 命令 expr ARG1 \運算符 ARG2 如A=$(expr $B \* $C)

5 Var++ Var--...

6 Var+=Var2...



bash中的條件測試

數值測試

-gt great than 是否大於

-ge great than or equal 是否大於等於

-eq equal 是否等於

-ne not equal 是否不等於

-lt less than 是否小於

-le less than or equal 是否小於等於


字符串測試

== 是否等於

> 是否大於 使用字母排序方式,如果前邊的字符串排在後邊字符串之後,則為真

< 是否小於 使用字母排序方式,如果前邊的字符串排在後邊字符串之前,則為真

!= 是否不等於

=~ 左側字符串是否能夠被右側的PATTERN所匹配 此種只能用 [[ ]]方式

-z "string" 測試字符串是否為空,空則為真

-n "string" 測試字符串是否不空,不空為真


文件測試

1. 存在性測試

-a FILE (少用)

-e FILE 文件存在性測試,存在為真

2. 存在性並類別性測試

-b FILE 文件存在且為塊設備為真

-c FILE 文件存在且為字符設備為真

-d FILE 文件存在且為目錄文件為真

-f FILE 文件存在且為普通文件為真

-h 或 -L FILE 文件存在且為符號連接文件為真

-p FILE 文件存在且為命名管道文件為真

-S FILE 文件存在且為socket文件為真

3. 文件權限測試

-r FILE 是否存在且可讀

-w FILE 是否存在且可寫

-x FILE 是否存在且可執行

4. 文件特殊權限測試

-g FILE 是否存在且擁有sgid權限

-u FILE 是否存在且擁有suid權限

-k FILE 是否存在且擁有sticky權限

5. 文件大小測試

-s FILE 是否存在且非空

6. 文件是否打開

-t fd: fd表示文件描述符是否已經打開且與某終端相關

-N FILE 文件自上一次被讀取之後是否被修改過

-O FILE 當前有效用戶是否為文件屬主

-G FILE 當前有效用戶是否為文件屬組

7. 雙目測試

file1 -ef file2 兩文件是否指向同一個設備上的相同inode

file1 -nt file2 文件1的mtime新於file2為真

file1 -ot file2 file1的mtime舊於file2為真


組合測試條件

&&(與) ||(或) !非

EXPRESSION -a EXPRESSION 與

EXPRESSION -o EXPRESSION 或

! EXPRESSION 非


bash腳本語句控制

if EXPRESSION; then

...

elif CONDITION; then

...

else

...

fi


for 變量名 in 列表; do

...

done


while CONDITION; do

...

done


until CONDITION; do

...

done


腳本測試

bash -n scripts.sh 測試語法問題

bash -x scripts.sh 顯示每條執行命令,可用來檢查腳本執行過程



grep和正則表達式

Global search REgular expression and Print out the line

一款文件過慮工具,通過用戶所指定的模式來搜索文本並打印出文本中所匹配到的行


--color 高亮顯示匹配到的行

-v 顯示不能被pattern所匹配到的行

-i 忽略字符大小寫

-o 僅顯示匹配到的字符串

-q 靜默模式,不輸出任何信息,一般用於測試是否匹配到

-A # after 顯示匹配到的後#行

-B # before 顯示匹配到的前#行

-C # context 顯示匹配到的前後各#行

-E 使用ERE 支持使用擴展的正則表達式


基本正則表達式元字符

字符匹配

. 匹配任意單個字符

[] 匹配指定範圍內的任意單個字符

[^] 匹配指定範圍外的任意單個字符

[]中的範圍有以下幾種表示方法

[:alnum:] 表示所有字母和數字

[:alpha:] 表示所有的字母

[:digit:] 表示所有的數字

[:lower:] 表示所有的小寫字母

[:punct:] 表示所有的標點符號

[:space:] 表示空白字符

[:upper:] 表示所有的大寫字母

次數匹配

* 匹配前邊的字符任意次

.* 任意長度的任意字符

\? 匹配其前面的字符0或1次

\+ 匹配其前面的字符至少1次

\{m\} 匹配前面的字符m次

\{m,n\} 匹配前面的字符至少m次,最多n次

\{0,n\} 匹配前面的字符最多n次

\{m,\} 匹配前面的字符至少m次

位置錨定

^ 行首錨定,用於模式的最左側

$ 行尾錨定,於用模式的最右側

^PATTERN$ 用於匹配整行

^$ 空行,不包含空格的行

^[[:space:]]*$ 空行,但包含空格的行

\< 或 \b 詞首錨定,用於單詞模式的左側

\> 或 \b 詞尾錨定,用於單詞模式的右側

\<PATTERN\> 匹配到整個單詞

分組

分組是指將一個或多個字符捆綁在一起,當作一個整體進行處理,並供後向引用

\(\)


擴展正則表達式元字符

字符匹配

[] 匹配指定範圍內的任意單個字符

[^] 匹配指定範圍外的任意單個字符

擴展和基本正則表達式相同

次數匹配

* 任意次

? 0次或1次

+ 至少1次

{m} 精確匹配m次

{m,n} 至少m次,最多n次

{m,} 至少m次

{0,n} 最多n次

錨定

擴展正則表達式的位置錨定與基本正則表達式的相同,不再重復說明

分組

() 用括號括起來表示要引用的內容,不需要轉義。 後向引用




文件查找

locate 此命令為非實時查找文件,依賴自身的數據庫updatedb可以手動更新此數據庫

find 此命令為實時查看文件,特點精確查找,精準查找,速度慢


find 用法

find [options]... [查找路徑] [查找條件] [處理動作]


查找路徑: 默認為當前目錄

查找條件: 默認為指定路徑下的所有文件

處理動作: 默認為顯示至屏幕


查找條件

-name "文件名稱" 支持使用globbing字符

-iname "文件名稱" 查找時忽略字符大小寫

-user USERNAME 根據文件的屬主查找

-uid UID 查找指定的UID文件

-gid GID 查找指定的GID文件

-nouser 查找沒有屬主的文件

-nogroup 查找沒有屬組的文件


根據文件類型查找

-type TYPE 根據文件類型查找

f 普通文件

d 目錄文件

l 符號鏈接

b 塊設備文件

c 字符設備文件

s 套接字文件

p 命名管道文件


根據文件大小查找

-size [+|-]#UNIT 常用單位: K,M,G

#UNIT #-1<x<=#

-#UNIT x<=#-1

+#UNIT x>#

如 5k 表示 4k<x<=5k

-5K 表示 x<=4K

+5K 表示 x>5K


根據時間戳查找

以“天”為單位

-atime [+|1]#

+# x>=#+1

-# x<#

# #<=x<#+1

-mtime

-ctime


以分鐘為單

-amin

-mmin

-cmin


根據權限查找

-perm [+|-]MODE

MODE 與MODE精確匹配

如: find . -perm 644

+MODE 任何一類用戶的權限只要能包含對其指定的任何一位權限即可

find ./ -perm /222 表示任何一類用戶的權限中包含寫權限就OK

find ./ -perm /621 表示屬主有讀或寫,或屬組有寫,或其它有執行

權限都會被匹配到

-MODE 每類用戶指定的權限都必須匹配,為三類用戶所有指定的權限都能夠

包含如:

find ./ -perm -222 表示每一位中的權限大於等於2就匹配

find ./ -perm -555 表示包括666, 676 等,但不包括555等


NOTE: +020中的0表示不匹配屬主和其它位的權限,而不是說屬主和其它位沒有

沒有任何權限


組合條件查找

-a 與, -o 或, -not ! 條件取反


處理動作

-print 默認處理動作,顯示打印到屏幕上

-ls 類似於ls -l

-delete 刪除查找到的文件

-fls /path/to/somefile 查找到的所有文件的長格式信息保存至指定的文件中

-ok COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令,對於每個文件

執行命令之前,都會交互式要求用戶確認,其它{}表示前面查找到的所有內容

的引用,

-exec COMMAND {} \; 對查找到的每個文件執行COMMAND指定的命令

(不會有交互提示)


linux學習第4天(自習)