2018-3-26Linux系統管理(14)bash腳本編程之循環控制語句
yum client
),而我們管理程序包所使用的命令為yum
命令。而服務器端並不是yum服務器端,但我們可以稱之為yum的倉庫端(yum repository
),yum的倉庫端需要提供一種文件共享服務,將其yum倉庫的程序包讓客戶端能夠訪問到,這其中在C/S架構模型當中經常用到的協無非就是ftp/http/https
,那也就意味著,實際上yum工作時,每一個客戶端主機都需要有yum命令,其次還需要提供其配置文件,可提供多個以.repo
結尾放置在/etc/yum.repos.d/
目錄下,也是片段性文件。 每一個.repo
結尾的文件就可以定義一個yum的指向,但也可以定義多個,那麽我們對於以上的總結及yum的語法格式做出簡單贅述:
回顧:yum程序包管理器和編譯安裝 C/S yum client(yum) yum repository(ftp/http/https) base extras updates repo: [id] name= baseurl=http:// http://
但需要註意的是,對於CentOS任何一個發行版來講,至少有一個源叫base
源,我們在安裝操作系統時,不可能將所有的軟件包將其安裝,要想安裝額外的安裝包時,可以將光盤制作成為yum倉庫,而那個倉庫就是一個base倉庫,所以無論是阿裏雲還是清華鏡像等站點,通常在os
目錄下就有base源,但除了base源還有extras
和updates
。無論是那個發行版,將光盤作為一個最基本的倉庫來安裝程序包,剩余則都是補充而已。
yum的各種管理機制就是通過其各種子命令來完成的,我們來簡單闡述並加以總結:
子命令: yum的各種管理機制是由各種子命令形成的 list, clean, makecache, grouplist, info, whatprovides install, update, remove, groupinstall, groupupdate, groupremove, groupinfo
以上就是總結的yum程序包的管理,而後我們也講到過如何用源碼包進行安裝該程序,而編譯安裝其實也是一種非常重要的能力,其主要講的還是C/C++編譯上的安裝,使用的為大致標準三個步驟,第一個是configure
這是系統編譯安裝檢查腳本,並且編譯安裝符合條件之後還能結合Makefile.in
,生成makefile
文件,而第二步就是使用make
結合makefile
編譯的配置文件來編譯執行makefile
,而編譯完成之後,無論是二進制還是庫文件程序以及配置文件等,都依然準備完成,而後使用make install
復制到在configure指定的安裝路徑中去,生成相應的文件目錄,將文件依次歸類存放運用。
編譯安裝: C/C++: ./confiure --> makefile.in ==> makefile make + makefile ==> binary, library, configfile, manual make install
那麽在這一章當中,繼續講解bash腳本的內容。
一、bash腳本編程之if語句
此前我們也講過,一個過程式編程語言的執行流程大致分為三類:
過程式編程語言的執行流程: 順序執行 選擇執行 循環執行
回顧我們此前講到的選擇執行,選擇執行可以有兩種方式來實現,第一種&&
以及||
,這是最常用的兩種機制,第二種是if語句,其實還有第三種為case語句。
選擇執行: (1) &&, || (2) if語句 (3) case語句
那麽if語句其實是有三種格式,我們講了其中的兩種,第一種為單分支的if語句,為真執行該語句,為假則不執行該語句,另一種為雙分支的if語句,那麽之所以叫選擇分支就因為它是布爾型的條件,以此結果就帶來要麽為真,要麽為假,為真時執行該分支,為假時執行另一個該分支,所以叫做選擇執行,那麽第三種就是多分支的if語句,這種是在當有n種可能時,我們都需要做一下測試,所以當我們的條件不止有真假時,而是有多個選擇時,可以滿足多個測試時可將其應用。否則,所有的條件都不滿足時,我們才能執行無法識別的語句等。那麽無論是單分支或雙分支以及多分支語句的格式為:
if語句:三種格式 單分支的if語句 if CONDITION; then if-true-分支 fi 雙分支的if語句 if CONDITON1; then if-true-分支 else if-false-分支 fi 多分支的if語句 if CONDITION1; then 條件1為真分支 elif CONDITION2; then 條件2為真分支 elif CONDITION3; then 條件3為真分支 ... ... elif CONDITIONn; then 條件n為真分支 else 所有條件均不滿足時分支 fi
需要註意的是,多個CONDITION條件如果不互斥的話,多個條件滿足也是存在的,但在這裏的分支只能是執行其中一個,會執行首先測試為"真"的一個。如果該條件為真時,則後續條件不用測試,如果條件都不為真時,則執行else
分支。
註意:即便多個條件可能同時都能滿足,分支只會執行其中一個,首先測試為"真";
練習:讓用戶通過腳本參數傳遞一個文件路徑給腳本進行判斷其類型。
#!/bin/bash # [ -z "$1" ] && echo "Please input filename or directory address" && exit 2 [ $# -lt 1 ] && echo "At lease on path" [ ! -e "$1" ] && echo "No Such File!" && exit 3 if [ -d "$1" ]; then echo "This is Directory!" elif [ -f "$1" ]; then echo "This is a Commin Files!" elif [ -L "$1" ]; then echo "This is a Link Files." elif [ -b "$1" ]; then echo "This is Block Files!" elif [ -c "$1" ]; then echo "This is Charactor Files!" elif [ -S "$1" ]; then echo "This is a Socket Files." else echo "Unknown Files or Directory!" fi
測試或者選擇語句還有第三種語句,叫做case語句,其實case語句就是簡化版的多分支語句,用於實現簡化版的多分支if,但未必每個多分支的if語句都能寫成case語句,還有就是if語句其實是可以嵌套的,也就是說,if中可以繼續使用if,還可以包含其它執行語句。
註意:if語句可嵌套
二、bash腳本之循環語句
所謂循環執行我們此前講過,無非就是將一段代碼重復執行n次,能夠實行將一段代碼重復實行n次,需要註意的是,要實行循環時,就要指定其循環次數,我們要想辦法控制其循環次數,不然的話則無法退出,變成死循環,當然也有些場合是需要實行死循環。
對於循環來說有兩個關鍵要點,一種就是進入條件,就是什麽時候開始循環,另一種就是退出條件,而這兩點非常重要。所謂進入條件指的是,當程序執行到循環體時,判斷是否能夠執行以及是否能夠執行,要取決於記錄條件。
循環執行:將一段代碼重復執行0次、1次或多次; 進入條件:條件滿足時則進入循環; 退出條件:每個條件都應該有退出條件,以有機會退出循環;
對於bash腳本來講,共有三種循環方式,分別為:
bash腳本: for循環 while循環 until循環
後兩者沒有太大的區別,除了進入條件相反。
2.1 for循環
對於for循環來說,將列表中的每個元素依次賦值給VARIABLE中進行遍歷執行循環體即可,for循環共有兩種格式。
for循環: 兩種格式: (1) 遍歷列表 (2) 控制變量
我們先說第一種,通過遍歷列表的格式,則for循環遍歷語法格式為:
遍歷列表: for VARIABLE in LIST; do 循環體 done
那麽for循環的進入條件和退出條件為:
進入條件:只要列表有元素,即可進入循環; 退出循環:列表中的元素遍歷完成;
例如:創建是個文件,從f1-f10。
#!/bin/bash # for i in 1 2 3 4 5 6 7 8 9 10; do touch /tmp/f$1 done
當然如果要是這樣創建100個文件的話,確實是一件非常麻煩的事情,另外一個,不能直接使用touch命令,很有可能是會更改時間戳的,真正創建文件時,應該判斷是否存在,如果不存在則創建,存在的話則更改一下時間戳而已。所以說一定要註意該命令實現什麽功能,是否有其冪等性,每個循環當中的冪等是能夠重復執行的,冪等執行可允不允許重復執行,即使不重復執行時,哪怕只執行一次,也得有個意外條件,所以說判斷至關重要。
那麽LIST
的生成方式有很多中,剛才給出的示例也是其中一種,那麽我們現在對於LIST的生成方式做一下簡單的闡述:
LIST生成方式: (1) 直接給出; (2) 整數列表 (a) {start..end} (b) seq [start [incremtal]] last (3) 返回列表的指令; (4) glob; (5) 變量引用 $@, $# ... ...
2018-3-26Linux系統管理(14)bash腳本編程之循環控制語句