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天(自習)