亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

條件判斷之if、case語句和文件查找命令

發布時間:2020-07-04 10:08:53 來源:網絡 閱讀:1075 作者:nieda_linux 欄目:數據庫

一、腳本編程

1、if語句怎樣用

人生面臨許多選擇,在編程世界里同樣也有許多選擇。同其他編程語言一樣,當我們想寫一個功能健壯的腳本時,通過條件判斷來選擇適合的操作尤為重要。在我們執行某些重要的操作之前,判斷當前環境是否適合執行這一操作是非常重要的。我們可以用&&和||來做簡單的判斷,不過shell有更用的語句。shell有兩種常見的條件選擇語句if和case。我們先來看一下if該怎樣用吧。

if語句的單分支語法:

if 條件判斷 ;then;執行命令;fi

[root@localhost ~]# type if
if is a shell keyword
[root@localhost ~]# type fi
fi is a shell keyword
[root@localhost ~]# type then
then is a shell keyword

首先可以看到,if、fi和then在shell中都是關鍵詞

雙分支:

if 條件判斷 ;then
    執行代碼
else
    執行代碼
fi
多分支:
if 條件判斷;then
    執行代碼
elif 條件判斷;then
    執行代碼
elif 條件判斷;then
    執行代碼
.........
else
    執行代碼
fi

if語句逐一判斷,當遇到條件為真時則執行該條件下的分支命令,而后結束整個if語句

當然,if語句本身很簡單的,但使用if語句必須要熟練掌握條件測試語句,并且當if語句和其他語句嵌套使用時必須要理清邏輯關系否則將很難排錯。


2、shell的case語句

當我們要判斷的條件是連續的邏輯關系時可以很方便的使用if來操作,但是如果是離散關系時,if語句將會顯得臃腫而繁瑣,這時使用case語句將非常高效。在Linux中特別是寫一些服務的啟動腳本時將會遇到很多的case語句,掌握case語句是做運維,至少是腳本開發要掌握的一個基本知識。

和if語句不同,case語句的邏輯關系更加清晰

case 變量引用 in
pat1)
    分支1
    ;;
pat2)
    分支2
    ;;
.........
*)
    最后的分支
    ;;
esac

case支持通配符,如*,?,[],|等

注意最后要寫esac,將case倒轉和if相同,如果不寫將報錯


二、文件查找

1、loacte通過名字查找文件

locate通過updatedb庫來查找文件,默認使用包含通配符的pattern,如果沒用通配符默認匹配全路徑包括路徑名。如果剛創建的文件沒有同步到數據庫中locate命令將無法查找。

locate默認的查找庫是/var/lib/mlocate/mlocate.db,系統設置默認計劃執行數據庫的同步任務,當整個文件系統很復雜且變化很大時時同步任務將會耗費大量的系統資源。

locate的特點:

  • 查找速度塊

  • 模糊查找

  • 非實時查找

  • 只搜索用戶具備讀取和執行權限的目錄

整個locate工作其實是由四部分組成的:
/usr/bin/updatedb       主要用來更新數據庫,這個工作是通過crontab自動完成的。
/usr/bin/locate(mlocate)   是作來完成查詢功能的程序。
/etc/updatedb.conff   是配置要查詢哪些目錄、哪些文件。
/var/lib/mlocate/mlocate.db   存放文件信息的文件。


locate命令的選項:

-A:--all 后面有多個模式,只打印符合所有匹配模式的文件

-b:--basename 只匹配基名符合pattern的文件,和--wholename的用法相反

-c:--count 只顯示匹配到的文件的數量,不顯示匹配到的文件

-d:--database 使用指定的搜索數據庫替換默認的,-表示從標準輸入讀取庫

-e:--existing 只顯示當locate運行時已存在的文件

-L:--follow 當文件存在時跟隨蔓延的符號鏈接(默認) 

-i:--ignore-case 匹配模式時忽略大小寫區別

-l:--limit -n LIMIT限制為LIMIT項目的輸出(或計數)   

-m:--mmap 忽略向后兼容性

-P:--nofollow, -H當檢查文件時不跟隨蔓延的符號鏈接  

-0:--null 輸出時以NUL分隔項目 

-S:--statistics 不搜索項目,顯示有關每個已用數據庫的統計信息

-q:--quiet 不報告關于讀取數據庫的錯誤消息

-r:--regexp REGEXP搜索基本正則表達式REGEXP來代替glob模式  

--regex 模式是擴展正則表達式

-s:--stdio 忽略向后兼容性

-w:--wholename 匹配完整路徑名(默認) 


二、find實時查找工具,通過遍歷指定路徑完成文件查找

查找特點:

查找速度慢

精確查找

實時查找

只查找用戶有相應權限的目錄

語法:find [options] [查找起始路徑] [查找條件] [處理動作]

查找條件:選項+測試條件

條件測試:結果通常是布爾型

組合測試:

與:-a 或:-o 非:-no或!

德·摩根定律:

!(-pat1 -o -pat2) = ! -pat1 -a ! -pat2

條件判斷之if、case語句和文件查找命令

!(pat1 -a pat2) = ! pat1 -o ! pat2

條件判斷之if、case語句和文件查找命令

  • 根據文件名判斷

-name pattern,通配符匹配,精確匹配,pattern要加引號

-iname 不區分大小寫

-inum 查找所有分區某個inode號的所有文件

-samefile 查找inode相同的文件

[root@localhost ~]# find / -samefile test.sh
find: ‘/proc/3732/task/3732/fd/7’: No such file or directory
find: ‘/proc/3732/task/3732/fdinfo/7’: No such file or directory
find: ‘/proc/3732/fd/7’: No such file or directory
find: ‘/proc/3732/fdinfo/7’: No such file or directory
/root/test.sh
/opt/t

注意:find只找磁盤文件,對于/proc里的內存文件無法查找

-links n 鏈接數為n的文件或目錄

-regex 匹配整個路徑而不是基名,所以正則模式要把完整的目錄路徑也包括進去。find默認使用的是emacs正則,如果要換其他的正則可以用-regextype選項來指定

  • 根據文件的從屬關系

-user username 查找某個用戶的所有文件

-group groupname 查找某個組所有的文件

-uid 根據uid來查找

-gid 根據gid來查找

-nouser 查找沒有屬主的文件

-nogroup 查找沒有屬組的文件

注意:Linux使用id來標識文件的從屬關系

  • 根據文件類型查找

-type 后面接文件的類型,注意文件和目錄包括符號鏈接,所以判斷時最好將符號連接寫在前面

  • 根據文件大小查找:

-size [+|-]#UNIT 常用單位:K、M、G默認為字節

注意:只有字節為單位才能夠精確超找,如果以其他單位找,在兩個相鄰整數間的數一律看作大的那一個

#UNIT:(#-1,#]

-#UNIT:[0,#-1]

+#UNIT:(#,)

條件判斷之if、case語句和文件查找命令

  • 根據時間查找

根據時間查找有兩個單位,且他們的計算方法是不一樣的

1、以天為單位

-atime [+|-]#

-mtime

-ctime

條件判斷之if、case語句和文件查找命令

2、以分鐘為單位

-amin [+|-]#

-mmin

-cmin

條件判斷之if、case語句和文件查找命令

當#為1時,mmin 1和mmin -1的區域將會重疊

  • 根據權限查找:

-perm:[/|-]mode 數字

mode 精確匹配權限

/mode 任何一類用戶的任何一位權限符合條件即可

-mode 所有用戶每一位權限都必須符合

注意:/000和-000一樣,0表示不關心權限

  • 處理動作

-print:輸出到stdout,默認打印

-ls:顯示文件的長格式信息

-delete 刪除查找的文件

-fls /PATH 將查找的文件保存到指定文件

-ok command {} \;將查找的文件執行command命令,{}代表查找到的文件,但每操作一個文件都會有提示。

-exec command {} \;沒有提示,其中\;代表結束

注意:-ok和-exec是將find找到的所有文件一個一個的處理,即給每一個文件執行一次命令,我們知道一個命令就是一個進程,當找到的文件有很多時,將會消耗較多的資源并導致效率的下降,為了避免這個問題可以用xargs

find 查找條件 |xargs command

xargs是將find找到的所有結果當成一個參數傳給command,即command只執行了一次,效率更高。但是 由于將所有的結果用一個空格隔開然后變成一個變量的模式,當遇到查找到的文件名中有空格將會出錯

  • 排除目錄:

-path PATH -prune 組合排除,并且的關系

[root@localhost ~]# find /etc -path '/etc/sane.d' -prune -o -name "*.conf"
/etc/resolv.conf
/etc/fonts/conf.d/65-0-lohit-marathi.conf
/etc/fonts/conf.d/59-liberation-mono.conf
/etc/fonts/conf.d/67-lohit-malayalam.conf
/etc/fonts/conf.d/59-liberation-sans.conf
/etc/fonts/conf.d/65-0-lohit-punjabi.conf
/etc/fonts/conf.d/10-scale-bitmap-fonts.conf
/etc/fonts/conf.d/60-open-sans.conf
/etc/fonts/conf.d/20-unhint-small-vera.conf
/etc/fonts/conf.d/65-0-madan.conf
/etc/fonts/conf.d/25-no-bitmap-fedora.conf
/etc/fonts/conf.d/66-ucs-miscfixed.conf
......


練習

1、查找/var目錄下屬主為root,且屬組為mail的所有文件

[root@localhost ~]# find /var/ -user root -group mail -ls
201327104    0 drwxrwxr-x   2 root     mail           50 Aug 14 10:37 /var/spool/mail
206330921    8 -rw-------   1 root     mail         4219 Aug 14 10:37 /var/spool/mail/root

2、查找/var目錄下不屬于root、lp、gdm的所有文件

[root@localhost ~]# find /var/ ! \( -user root -o -user lp -o -user gdm \) -ls
135969642    0 drwxr-xr-x   3 colord   colord         50 Aug  2 21:22 /var/lib/colord
203103112    0 drwxr-xr-x   2 colord   colord          6 Nov 20  2015 /var/lib/colord/icc
139609985    4 -rw-r--r--   1 colord   colord       4096 Aug  2 21:22 /var/lib/colord/mapping.db
139609986    8 -rw-r--r--   1 colord   colord       7168 Aug  2 21:22 /var/lib/colord/storage.db
68217670    0 drwx------   2 tss      tss             6 Nov 21  2015 /var/lib/tpm
135970004    0 drwxr-xr-x   2 unbound  unbound        21 Aug  3 06:10 /var/lib/unbound
135970006    4 -rw-r--r--   1 unbound  unbound       409 Nov 20  2015 /var/lib/unbound/root.key
204613039    0 drwxr-x--x   7 qemu     qemu           69 Aug  2 21:18 /var/lib/libvirt/qemu
 10634    0 drwxr-xr-x   2 qemu     qemu            6 Aug  2 21:18 /var/lib/libvirt/qemu/save
70295736    0 drwxr-xr-x   2 qemu     qemu            6 Aug  2 21:18 /var/lib/libvirt/qemu/snapshot
139609974    0 drwxr-xr-x   2 qemu     qemu            6 Aug  2 21:18 /var/lib/libvirt/qemu/dump
206290799    0 drwxr-xr-x   3 qemu     qemu           19 Aug  2 21:18 /var/lib/libvirt/qemu/channel
 10635    0 drwxr-xr-x   2 qemu     qemu            6 Aug  2 21:18 /var/lib/libvirt/qemu/channel/target
.........

3、查找/var目錄下最近一周內其內容修改過,同時屬主不為root,也不是postfix的文件

[root@localhost ~]# find /var/ -mtime -7 -not \( -user root -o -user postfix \) -ls
67136164    4 -rw-------   1 setroubleshoot setroubleshoot     3286 Aug 10 22:34 /var/lib/setroubleshoot/setroubleshoot_database.xml
1485002    0 drwxrwx--T   6 gdm      gdm            79 Aug 10 22:33 /var/lib/gdm
136239626    4 -rw-r--r--   1 gdm      gdm            43 Aug 10 22:33 /var/lib/gdm/.pulse/9987c5b50f134797b202165f43b10443-default-sink
136239627    4 -rw-r--r--   1 gdm      gdm            42 Aug 10 22:33 /var/lib/gdm/.pulse/9987c5b50f134797b202165f43b10443-default-source
 10663    4 -rw-------   1 gdm      gdm           930 Aug 10 22:33 /var/lib/gdm/.ICEauthority
.........

4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件

[root@localhost ~]# find / -atime -7 \( -nouser -o -nogroup \) -ls
find: ‘/proc/2924/task/2924/fd/6’: No such file or directory
find: ‘/proc/2924/task/2924/fdinfo/6’: No such file or directory
find: ‘/proc/2924/fd/6’: No such file or directory
find: ‘/proc/2924/fdinfo/6’: No such file or directory
139610001    0 drwx------   2 1000     1000            6 Aug  2 21:26 /tmp/.esd-1000
 10683    0 drwxr-xr-x   2 1000     1000            6 Aug  2 21:26 /tmp/hsperfdata_nieda
 10680    0 drwx------   2 1000     1000            6 Aug  2 21:26 /tmp/tracker-extract-files.1000
 10648    4 drwx------  14 1000     1000         4096 Aug  2 21:26 /home/nieda
67136350    0 drwxr-xr-x   4 1000     1000           37 Aug  3 06:08 /home/nieda/.mozilla
139173477    0 drwxr-xr-x   2 1000     1000            6 Jun 10  2014 /home/nieda/.mozilla/extensions
203103518    0 drwxr-xr-x   2 1000     1000  
.........

5、查找/etc目錄下大于1M且類型為普通文件的所有文件

[root@localhost ~]# find /etc/ -size -1M -type f |xargs ls -lh
-rw-r--r--. 1 root root 0 Sep 10  2011 /etc/akonadi/mysql-local.conf
-rw-------. 1 root root 0 Jul 27  2015 /etc/cron.deny
-rw-------. 1 root root 0 Aug  3 06:08 /etc/crypttab
-rw-------. 1 root lp   0 Nov 20  2015 /etc/cups/classes.conf
-rw-r--r--. 1 root lp   0 Nov 20  2015 /etc/cups/client.conf
-rw-r--r--. 1 root lp   0 Nov 20  2015 /etc/cups/lpoptions
-rw-------. 1 root lp   0 Nov 20  2015 /etc/cups/printers.conf
-rw-r--r--. 1 root root 0 Aug 12  2015 /etc/environment
-rw-r--r--. 1 root root 0 Jun  7  2013 /etc/exports
-rw-r--r--. 1 root root 0 Mar  6  2015 /etc/ghostscript/9.07/cidfmap.local
-rw-r--r--. 1 root root 0 Mar  6  2015 /etc/ghostscript/9.07/CIDFnmap.local
-rw-r--r--. 1 root root 0 Mar  6  2015 /etc/ghostscript/9.07/Fontmap.local
-rw-r--r--. 1 root root 0 Jun  7  2013 /etc/motd
-rw-------. 1 root root 0 Aug  3 06:10 /etc/.pwd.lock
-rw-r--r--. 1 root root 0 Nov 20  2015 /etc/qemu-kvm/target-x86_64.conf
-rw-r--r--. 1 root root 0 Nov 20  2015 /etc/security/console.apps/xserver
-rw-------. 1 root root 0 Aug 18  2015 /etc/security/opasswd
-rw-r--r--. 1 root root 0 Nov 21  2015 /etc/selinux/targeted/contexts/files/file_contexts.local
-rw-r--r--. 1 root root 0 Nov 21  2015 /etc/selinux/targeted/contexts/files/file_contexts.subs
-rw-------. 1 root root 0 Nov 21  2015 /etc/selinux/targeted/modules/active/netfilter_contexts
-rw-r--r--. 1 root root 0 Nov 21  2015 /etc/selinux/targeted/modules/semanage.read.LOCK
-rw-r--r--. 1 root root 0 Nov 21  2015 /etc/selinux/targeted/modules/semanage.trans.LOCK
-rw-r--r--. 1 root root 0 Jun 10  2014 /etc/sysconfig/run-parts
-rw-r--r--. 1 root root 0 Jun 10  2014 /etc/wvdial.conf

6、查找/etc目錄下所有用戶都沒有寫權限的文件

[root@localhost ~]# find /etc/ -not -perm /222 -ls
134499699  196 -r--r--r--   1 root     root       198453 Aug  3 06:09 /etc/pki/ca-trust/extracted/java/cacerts
201850195  352 -r--r--r--   1 root     root       359773 Aug  3 06:09 /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
330861  264 -r--r--r--   1 root     root       266702 Aug  3 06:09 /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
330862  216 -r--r--r--   1 root     root       217510 Aug  3 06:09 /etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem
330863  208 -r--r--r--   1 root     root       211626 Aug  3 06:09 /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem
625260    4 -r--------   1 root     root           45 Aug  3 06:09 /etc/openldap/certs/password
136242234    4 ----------   1 root     root          785 Aug 16  2016 /etc/gshadow
134317908    4 ----------   1 root     root          795 Aug 13 18:26 /etc/gshadow-
134317916    4 ----------   1 root     root         1303 Aug 16  2016 /etc/shadow-
136242221    4 ----------   1 root     root         1183 Aug 16  2016 /etc/shadow
1058222    4 -r--r--r--   1 root     root          531 Sep  6  2015 /etc/lvm/profile/cache-mq.profile
1058223    4 -r--r--r--   1 root     root          338 Sep  6  2015 /etc/lvm/profile/cache-smq.profile
1058224    4 -r--r--r--   1 root     root         2249 Nov 21  2015 /etc/lvm/profile/command_profile_template.profile
1058225    4 -r--r--r--   1 root     root          828 Nov 21  2015 /etc/lvm/profile/metadata_profile_template.profile
1058226    4 -r--r--r--   1 root     root           76 Sep  6  2015 /etc/lvm/profile/thin-generic.profile
1058227    4 -r--r--r--   1 root     root           80 Sep  6  2015 /etc/lvm/profile/thin-performance.profile
136009869    4 -r--r--r--   1 root     root          460 Nov 20  2015 /etc/dbus-1/system.d/cups.conf
1788506    4 -r--r--r--   1 root     root           63 Nov 20  2015 /etc/ld.so.conf.d/kernel-3.10.0-327.el7.x86_64.conf
139173483 6852 -r--r--r--   1 root     root      7014922 Aug  3 06:18 /etc/udev/hwdb.bin
135840874    4 -r--r--r--   1 root     root           33 Aug  3 06:10 /etc/machine-id
1058267    4 -r--r--r--   1 root     root          146 Nov 20  2015 /etc/pam.d/cups
139259112    8 -r--r-----   1 root     root         4188 Jul  7  2015 /etc/sudoers

7、查找/etc目錄下至少有一類用戶沒有執行權限的文件

[root@localhost etc]# find /etc/ -not -perm -111 -ls

8、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件

[root@localhost etc]# find /etc/init.d -perm -113 -ls
134370978    0 lrwxrwxrwx   1 root     root           11 Aug  3 06:08 /etc/init.d -> rc.d/init.d
[root@localhost etc]# ls /etc/init.d/ -l
total 32
-rw-r--r--. 1 root root 13948 Sep 16  2015 functions
-rwxr-xr-x. 1 root root  2989 Sep 16  2015 netconsole
-rwxr-xrwx. 1 root root  6630 Sep 16  2015 network
-rw-r--r--. 1 root root  1160 Nov 20  2015 README
[root@localhost etc]# find /etc/init.d/ -perm -113 -ls
203103221    8 -rwxr-xrwx   1 root     root         6630 Sep 16  2015 /etc/init.d/network

注意:查找目錄下的文件時,在目錄的后面必須要加上/,否則將查看目錄本身



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

麻栗坡县| 北票市| 息烽县| 昭苏县| 聂拉木县| 拉孜县| 德钦县| 嘉定区| 金沙县| 克拉玛依市| 大兴区| 衡山县| 本溪| 西华县| 和硕县| 南康市| 宜宾市| 察雅县| 南和县| 太仓市| 丰顺县| 德保县| 横山县| 甘洛县| 新丰县| 老河口市| 嘉禾县| 来凤县| 庆安县| 辛集市| 德令哈市| 龙川县| 阜新市| 玉树县| 湖北省| 天津市| 淅川县| 耿马| 丽水市| 石河子市| 蚌埠市|