shell腳本中if與case使用
查找文件locate與find的使用
壓縮,解壓及歸檔工具
執行的循序
順序執行
選擇執行
循環執行
條件語句if
if只是一個有含義的詞,不能單獨作為指令使用。
單分支
if 條件判斷:then
條件為真的分支代碼
fi
雙分支
if 判斷條件:then
條件為真的分支代碼
else
條件為假的分支代碼
fi
多分支
if 判斷條件1,
if-true
elif 判斷條件2,then
if-ture
elif 判斷條件3,then
if-ture
…
else
all-false
fi
case 條件判斷
多用于離散值的判斷
case
PAT1)
分支
;;
PAT2)
分支2
;;
…
*)
默認分支
::
esac
case *:任意長度任意字符
?:任意單個字符
[]:指定范圍內的任意單個字符
a|b: a or b
例子:
case $number in
1|3|6)
echo good
;;
2|4|7)
echo bad
;;
10|8|66)
echo very good
;;
esac
read -p "please input a number: " number
[ -z "$number" ] && echo "you must input a number " && exit
判斷輸入的數字是否正整數
read -p "please input a integer" n
! expr "$n" + 0 &> /dev/null && echo no digit && exit
[ $n -gt 0 ] && echo integer || echo "passive inte ger or zoro"
文件查找和壓縮文件
文件查找
locate
locate +文件名
默認是全文件系統搜索
基于數據庫搜索 /var/lib/mlocate/mlocate,db
updatedb 更新數據庫指令
-i 執行忽略大小寫
-n 只顯示指定的行數目
locate foo 搜索名稱或路徑帶有foo的文件
locate -r '\.sh$' 搜索以.sh結尾的文件
locate 是外部命令
-r, –regexp REGEXP 搜索基本正則表達式 REGEXP 來代替模式
find
實時查找工具,通過遍歷指定路徑完成文件查找:
查找速度慢
精確查找
實時查找
可能只搜索用戶具備讀取和執行權限的目錄
find 是外部命令
查找條件:
-name "文件名稱":可以使用 *,?,[],[^]
find -name "checkint*" 要使用"" ''不然會出現問題
find -name '[af]*.sh'
-iname:忽略大小寫
-inum n :按inode號碼查找
-samefile name :查找相同inode號碼的文件
-links n:連接數目為n的文件
-regex "PATTERN" :
find -regex '.*/.sh$'
-p:顯示文件所使用的真實路徑
根據屬主和屬組查找
按照UID,GID搜索
-user name:查找屬主為指定用戶的文件
-group grpname:查找屬組為指定組的文件
-uid userID:查找屬主指定UID的文件
-gid groupID:查找屬組指定GID的文件
-nouser:查找沒有屬主的文件
find / nouser
-nogroup:查找沒有屬組的文件
find / -nouser -nogroup
默認可以多指令使用
文件類型
-type
f: 普通文件
d: 目錄文件
l: 符號鏈接文件
s:套接字文件
b: 塊設備文件
c: 字符設備文件
p: 管道文件
find / -type b 搜索塊設備文件
組合條件:
與:-a
或:-o
非:-not, !
find -not -name "*.sh" -not -name "f*"
默認可以多指令使用
摩根定律:
非(P 且Q) = (非P) 或(非Q)
非(P 或Q) = (非P) 且(非Q)
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
不加括號括住所選的條件,最后加的-ls只會顯示最后的條件的值
-a:與的使用時候可以直接在后面 -ls
-o:或的時候使用要用括號括起來
-path 排除
find /root -path/root/bin -a -prune -o -name "*.sh" -print(打印) 排除了/rootbin ,查找.sh結尾 的文件打印
格式:-path 路徑 -a -prune(裁掉)
根據文件大小來查找:
-size [+|-]#UNIT
常用單位:k, M, G
find / -size 10K =(9K,10K]
#UNIT: (#-1, #],如:6k
(5k.6k] 5k到6k之間
-#UNIT:[0,#-1], 如:-6k
[0,5k] 0k到5k
+#UNIT:(#,∞), 如:+6k
[6k,+∞] 6k到無窮大
根據時間戳:
用“天”為單位
-atime [+|-]#
#: [#,#+1)
+#: [#+1,∞]
-#: [0,#)
-mtime
-ctime
-atime 7 [7,8)
-atime -7 [0,7]
-atime +7 [8,+∞)
find /etc/ -mmin -1 一分鐘以內發生變化的文件
以“分鐘”為單位:
-amin
-mmin
-cmin
根據權限查找
-perm +數字表示的權限
find /bin/ -perm 4755 -ls 精確查找權限為4755的文件
find -perm /222(+222) 7版本用/222 屬主屬組其他有一個有讀權限就滿足搜索條件
find -perm -222 屬主屬組其他都要有讀權限才能滿足搜索條件
沒有-,/,+,直接+數字就是精確匹配
處理動作:
-print:默認的處理動作,顯示至屏幕;
?-ls:類似于對查找到的文件執行“ls -l”命令
?-delete:刪除查找到的文件;
-fls file:查找到的所有文件的長格式信息保存至指定文件中
?-ok COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令;
對于每個文件執行命令之前,都會交互式要求用戶確認
find -perm -222 -ok rm {} \:
固定語法要帶\:結束
-ok chmod o-w {} \:
-exec cp {} {} .bak \:
{}專門配合find使用,表示搜索出匹配的文件
-exec COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令
?{}: 用于引用查找到的文件名稱自身
?find傳遞查找到的文件至后面指定的命令時,查找到所有符合條件的文件一次性傳遞給后面的命令
?有些命令不能接受過多參數,此時命令執行可能會失敗,下面方式可規避此問題
find | xargsCOMMAND
find -perm /222 |xargs 0(換行)
find -perm /002 type f -delete 刪除權限002的文件
壓縮,解壓及歸檔工具
compress[-dfvcVr] [-b maxbits] [file …]
-d: 解壓縮,相當于
-c: 結果輸出至標準輸出,不刪除原文件
-v: 顯示詳情
?uncompress解壓縮
?zcatfile.Z>file
compress m 壓縮,源文件刪除了
compress -c m > m.Z
compress -c -d m.Z >m 解壓縮,不刪除源文件。
uncompress m.Z 解壓文件
zcat m.Z 看壓縮文件內容,不進行文件解壓
zcat m.gz
gzip 壓縮(較常用)
gzip m 壓縮文件,.gz格式
gzip -d m.gz 解壓文件=gunzip
gzip -9 mgz(文件名)壓縮比例(1-9),默認是6
bzip2 壓縮效率更高
bzip2 m(文件)
bzip2 -d m 解壓縮文件
bzip2 -k m 壓縮保留源文件
bzip2 -9 m (1-9)壓縮比例,默認是6
bzcat 不顯式解壓縮的前提下查看文本文件內容
xz 壓縮效率最高
xz m(文件)
xz -d m 解壓縮文件
xz -k m 壓縮保留源文件
xz -9 m (1-9)壓縮比例,默認是6
xzcat :不顯示解壓縮的前提下查看文本內容
zip 打包壓縮 (壓縮多個文件)
zip –r sysconfig sysconfig/
zip m m
unzip m.zip 解壓縮
cat /var/log/messages | zip message – 壓縮文件
unzip -p message >message 會將解壓縮的結果顯示到屏幕上,但不會執行任何的轉換。
查找/var目錄下屬主為root,且屬組為mail的所有文件
查找/var目錄下不屬于root、lp、gdm的所有文件
查找/var目錄下最近一周內其內容修改過,同時屬主不為root,也不是postfix的文件
查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件
[root@zczx ~]# find / -nouser -nogroup -atime -7
查找/etc目錄下大于1M且類型為普通文件的所有文件
查找/etc目錄下所有用戶都沒有寫權限的文件
查找/etc目錄下至少有一類用戶沒有執行權限的文件
[root@zczx ~]# find /etc/ -not -perm /111
查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件
[root@zczx ~]# find /etc/init.d/ -perm -113
原創文章,作者:swzczx,如若轉載,請注明出處:http://www.www58058.com/36348
文章寫的很詳細,也很認真,對當天知識的梳理好好進行了梳理,是不是收獲很大呢?繼續保持哦