bash shell腳本編程入門篇(二)
read命令的使用
作用:
使用read來把輸入值分配給一個或多個shell變量:
-p指定要顯示的提示
-t TIMEOUT
read從標準輸入中讀取值,給每個單詞分配一個變量,所有剩余單詞都被分配給最后一個變量
EX.read -p “Enter a filename:“ FILE
條件選擇之if的使用
if的作用:選擇執行(注意:if語句可嵌套)
單分支
if 判斷條件;then
條件為真的分支代碼
fi
EX.單分支案例
雙分支
if 判斷條件; then
條件為真的分支代碼
else
條件為假的分支代碼
fi
EX.雙分支并嵌套if語句的例子
多分支
if 判斷條件1; then
if-true
elif 判斷條件2; then
if-ture
elif 判斷條件3; then
if-ture
…
else
all-false
fi
EX.多分支案例
總結:if的使用,是逐條件進行判斷,第一次遇為“真”條件時,執行其分支,而后結束整個if語句
條件選擇之case的使用
case語句語法格式:
case 表達式 in
模式1)
條件1
;;
模式2)
條件2
;;
模式n)
條件n
;;
*)
剩余條件
;;
esac
case中各模式可以使用glob匹配模式:
a|b:a或者b
*:匹配任意長度的任意字符
?:匹配任意單個字符
[ ]:范圍匹配
EX.case的使用案例
文件查找的使用
文件查找作用:在文件系統上查找符合條件的文件;
文件查找相關命令:locate, find
非實時查找(數據庫查找):locate
實時查找:find
locate命令的使用
1.locate命令特點:
(1)查詢系統上預建的文件索引數據庫
/var/lib/mlocate/mlocate.db
(2)依賴于事先構建的索引
(3)索引的構建是在系統較為空閑時自動進行(周期性任務),管理員手動更新數據庫(updatedb)
(4)索引構建過程需要遍歷整個根文件系統,極消耗系統IO資源
(5)工作特點:
查找速度快
模糊查找
非實時查找
搜索的是文件的全路徑,不僅僅是文件名
可能只搜索用戶具備讀取和執行權限的目錄
2.locate相關命令:
locate KEYWORD
(1)選項:
-i 執行區分大小寫的搜索
-n N只列舉前N個匹配項目
-r 支持使用正則表達式
(2)模糊搜索
locate "png" ;搜索含有jpg字眼的文件
(3)支持正則表達式
locate -r '\.png$' 使用regex來搜索以.jpg結尾的文件
EX.使用locate搜索以.png結尾的文件,不區分png的大小寫,且只顯示前10行搜索出來的內容。
EX.由于locate搜索的內容依賴于/var/lib/mlocate/mlocate.db里面的內容,所以如果數據塊里面沒有這個內容的話就搜索不到這個內容了。甚至有時候有些數據塊里面有的內容也搜不出來。
小總結:在生產環境中,如果使用locate命令搜索不到的想要內容,也不要用updatedb命令更新數據庫,因為可能要更新的數據有很多,這樣的話會造成系統會產生大量的IO,會造成系統嚴重卡頓。
find命令的使用
1.find命令的特點:
(1)實時查找工具,通過遍歷指定路徑完成文件查找;(普通用戶需要注意權限問題)
(2)查找速度略慢
(3)精確查找
(4)可能只搜索用戶具備讀取和執行權限的目錄
2.find命令的語法:
find [OPTION]… [查找路徑] [查找條件] [處理動作]
查找路徑:指定具體目標路徑;默認為當前目錄
查找條件:指定的查找標準,可以文件名、大小、類型、權限等標準進行;默認為找出指定路徑下的所有文件
處理動作:對符合條件的文件做操作,默認輸出至屏幕
3.find命令的查找條件
(1)根據文件名和inode查找:
-name "文件名稱":支持使用glob
*, ?, [], [^]
-iname"文件名稱":不區分字母大小寫
-inumn 按inode號查找
-samefilename 相同inode號的文件
-links n 鏈接數為n的文件
-regex "PATTERN":以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名稱
EX.直接匹配目錄下面的以s開頭,以.sh結尾的文件
EX.匹配目錄下面以s開頭,以d.sh結尾的文件,并且忽略大小寫
EX.匹配/testdir/shells下面以s開頭,以.sh結尾的文件
(2)根據屬主、屬組查找:
-user USERNAME:查找屬主為指定用戶(UID)的文件
-group GRPNAME: 查找屬組為指定組(GID)的文件
-uidUserID:查找屬主為指定的UID號的文件
-gidGroupID:查找屬組為指定的GID號的文件
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件
EX.查找/testdir/shells/下面屬主為w,屬組為wan的文件
(3)根據文件類型查找:
-type TYPE:
f: 普通文件
d: 目錄文件
l: 符號鏈接文件
s:套接字文件
b: 塊設備文件
c: 字符設備文件
p: 管道文件
EX.查找/testdir/shells/下面的目錄文件
(4)組合條件:
與:-a (默認情況下面已經是-a,例如 -user A -group A跟-user A -a -group A是一個意思)
或:-o
非:-not, !
EX.查找屬組為w或者屬組為w的文件,注意,用-o的時候,前后都需要加一個-ls.否則,只顯示后者(即-group w的-ls的結果)
(5)德·摩根定律:
( 非 P ) 或 ( 非 Q ) = 非 ( P 且 Q )
( 非 P ) 且 ( 非 Q ) = 非 ( P 或 Q )
EX.查找屬主和屬組都不是root的文件
(6)根據文件大小來查找:
-size [+|-]#UNIT
常用單位:k, M, G
#UNIT: (#-1, #]
如:6k 表示(5k,6k]
-#UNIT:[0,#-1]
如:-6k 表示[0,5k]
+#UNIT:(#,∞)
如:+6k 表示(6k,∞)
EX.查找/testdir/shells/目錄下文件大于1k的文件
EX.查找/testdir/shells/目錄下文件大于1k的文件,并且排除bierendesh這個目錄
(7)根據時間戳:
以“天”為單位;
-atime[+|-]# 訪問時間
#: [#,#+1) 無符號:表示短于(#+1)>x>=#天的時間段被訪問過
+#: [#+1,∞] 表示(#+1)天之外被訪問過
-#: [0,#) 表示#天內被訪問過的
-mtime 修改時間
-ctime 改變時間
以“分鐘”為單位:
-amin
-mmin
-cmin
EX.找出~/bin目錄下面兩天內修改過的文件并且按照提示刪除
EX.找出~/bin目錄下面兩天內修改過的文件并且直接刪除
(8)根據權限查找:
-perm [/|-]MODE
MODE: 精確權限匹配
/MODE:任何一類(u,g,o)對象的權限中只要能一位匹配即可,或關系,+ 從centos7開始淘汰
-MODE:每一類對象都必須同時擁有指定權限,與關系
0 表示不關注
EX.精確查找權限為644的文件
EX.查找u,g,o組都至少有讀和執行權限的文件
EX.查找u,g,o其中一個有讀寫權限的文件和目錄
4.find命令的處理動作:
-print:默認的處理動作,顯示至屏幕;
-ls:類似于對查找到的文件執行“ls -l”命令
-delete:刪除查找到的文件;
-flsfile:查找到的所有文件的長格式信息保存至指定文件中
-ok COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令;
對于每個文件執行命令之前,都會交互式要求用戶確認
-exec COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令
{}: 用于引用查找到的文件名稱自身
find傳遞查找到的文件至后面指定的命令時,查找到所有符合條件的文件一次性傳遞給后面的命令
有些命令不能接受過多參數,此時命令執行可能會失敗,下面方式可規避此問題
find | xargsCOMMAND
EX.處理動作示例
(1)刪除符合u=讀,或g=任意,或o=任意的文件
EX.把搜索出來的結果存檔到一個指定的文件
EX.搜索指定文件并且對符合條件的文件執行指定命令,-ok是會詢問,換成-exec則直接執行
小總結:find命令相當強大,但是各種參數也是很多的,需要查找時間的關系,還有權限/和-符號代表的意義。以及不要搞混亂德·摩根定律。
壓縮、解壓縮工具
compress/uncompress 命令的使用
compress [-dfvcVr] [-b maxbits] [file …]
-d: 解壓縮,相當于 uncompress
-c: 結果輸出至標準輸出,不刪除原文件
-v: 顯示詳情
uncompress解壓縮
zcat file.Z>file 能查看壓縮文檔并且重定向到指定文件,相當于~解壓縮..到~
EX.compress示例
gzip/gunzip 命令的使用
gzip[OPTION]… FILE …
-d: 解壓縮,相當于gunzip
-c: 將壓縮或解壓縮的結果輸出至標準輸出
-#:1-9,指定壓縮比,值越大壓縮比越大
zcat:不顯式解壓縮的前提下查看文本文件內容
EX.示例
gzip -c messages >messages.gz
gzip -c -d messages.gz > messages
zcat messages.gz > messages
EX.通過重定向解壓了并保持原文件的案例
bzip2/bunzip2/bzcat 命令的使用
bzip2 [OPTION]… FILE …
-k: keep, 保留原文件
-d:解壓縮
-#:1-9,壓縮比,默認為6
bzcat:不顯式解壓縮的前提下查看文本文件內容
EX.用bzip2壓縮文件并且保留原文件的示例
xz/unxz/xzcat 命令的使用
xz[OPTION]… FILE …
-k: keep, 保留原文件
-d:解壓縮
-#:1-9,壓縮比,默認為6
xzcat: 不顯式解壓縮的前提下查看文本文件內容
zip/unzip 命令的使用
打包壓縮目錄
zip –r 指定壓縮文件 壓縮目錄
解包解壓縮
unzip sysconfig.zip
這個命令最大的亮點是可以壓縮目錄,其他命令暫時都不支持壓縮目錄。
示例:
cat /var/log/messages | zip message –
unzip -p message > message
EX.壓縮目錄,需要注意輸入命令時候的壓縮文件和目錄位置
EX.解壓目錄到指定路徑
原創文章,作者:~微風~,如若轉載,請注明出處:http://www.www58058.com/36690
文章對當天總結的內容很進行了完整的總結和梳理,態度端正,作業完成的也很不錯,再接再厲。