天天看點

【學習】Linux Shell腳本執行個體之一 - 西秀嶺

【學習】Linux Shell腳本執行個體之一

1.程式流程控制執行個體

程式流程控制,實際上就是改變程式的執行順序。程式在執行過程中若流程被改變,就可能導緻輸出不同,是以利用這一特性就能夠實作程式執行結果的控制。程式流程控制可分為“選擇”和“循環”這兩類,在需要根據實際需求的不同實作不同的輸出時,就可以改變程式的執行流程。

(1)for循環語句

基于for語句的循環,基于繼續執行循環或者結束循環的方式。在for執行指令前,其會先檢查所要執行的清單中所指定的值是否還有未使用的,若有未使用的就指派并執行清單,直到清單中的值全部都使用過後才退出循環。

如下是一個簡單的 for 控制語句的腳本程式,其使用“星期”作為變量名,并從清單中讀取值,直到讀取完成後退出。

【學習】Linux Shell腳本執行個體之一 - 西秀嶺

我們執行一下

【學習】Linux Shell腳本執行個體之一 - 西秀嶺

說明:

第03 行,所定義的變量名為week,其值為Monday~ Sunday。

第05行,使用echo回顯變量week的值。

(2)while循環語句

while循環語句結構是一種執行一系列指令的語句結構,它所執行的指令由測試條件所決定,這些條件定義語句是否繼續執行。

在 while 循環語句中執行指令,若條件為真,則将過程執行一遍并回到開始處,接着再次進行條件的判斷,若條件仍然是真,則接着再執行一遍,直到條件為假時才退出循環。如下是一個數值運算的while循環腳本,其實作的是數值相加運算。

【學習】Linux Shell腳本執行個體之一 - 西秀嶺

執行一下看一下結果

【學習】Linux Shell腳本執行個體之一 - 西秀嶺

 說明:

第03和04行,聲明x和sum都為整型變量并賦予初始值。

第05行,條件測試。

第06~09行,這是一個循環體,當執行遇到done後,跳到第06行處繼續執行,直到條件不滿足時退出循環。

第10行,輸出總數值。

(3)until循環語句

與for和while循環體一樣,until循環也執行一系列的指令,直到條件滿足後退出循環。until循環在循環體的頂部繼續判斷條件,直到條件為真時結束循環,否則一直執行。

以下腳本使用until語句來實作一個簡單的、不斷循環的輸出預設值,直到人為幹預時結束循環(按Ctrl+C組合鍵退出)。

【學習】Linux Shell腳本執行個體之一 - 西秀嶺

(4)if選擇分支語句

【學習】Linux Shell腳本執行個體之一 - 西秀嶺

看一下執行結果:

【學習】Linux Shell腳本執行個體之一 - 西秀嶺

說明:

第03行,使用cat指令從目前目錄的testwhile.sh檔案中讀取資訊,然後通過管道傳送到grep指令進行過濾。其中,^ 表示檢查的關鍵字是該行的開始。

 第04行,若所需檢視的資訊存在,則輸出提示。

第05行,if語句結束的标記。

if語句的另外一種結構是if-then-else,這種if語句可以實作先判斷,然後根據判斷的結果選擇執行腳本代碼塊,也就是說,不管條件判斷的結果怎麼樣都有輸出。如下執行個體的主要作用是将讀取到的數值與預設值對比,然後根據對比結果執行代碼。

【學習】Linux Shell腳本執行個體之一 - 西秀嶺

看一下執行結果:

【學習】Linux Shell腳本執行個體之一 - 西秀嶺

 說明:

第03行:提示使用者輸入。

第04行,讀取使用者的輸入并放到JOB變量中。

第05~10行,判斷輸入的值并執行對應的代碼塊。

(5)case選擇語句

若需要判斷的條件達到一定數量,仍選擇使用if語句來實作,語句就會變得不易編寫且代碼變得沉長,同時也給日後的維護工作帶來不便。

case語句的出現,在很大程度上彌補了if語句的不足,case語句允許通過條件的判斷選擇執行不同的代碼塊。但需要注意的是,case對變量的使用不是強制性的,且每條語句都以右小括号結尾,每個代碼塊都以兩個分号結尾。

通過case結構來實作為多分支功能,可以使程式代碼不但易讀而且其結構更加簡潔。下面使用case結構來實作一個名字檢索腳本,腳本中的變量值在條件成立時就執行相應代碼。腳本的指令讀取輸入資訊,并判斷是否存在所輸入的資訊,之後就執行相應的代碼塊。

對于以上的問題,可以,看如下的例子。

【學習】Linux Shell腳本執行個體之一 - 西秀嶺

運作結果:

【學習】Linux Shell腳本執行個體之一 - 西秀嶺

 說明:

第04行,$name中的值為待測變量。

第06行,需要與待測變量值對比的預設值。

第09行,輸出一個空行。

第11行,如果第05行的值與預設值都不同,則對比此處的值。

第16行,case語句結束的标記。

完成之後,将所寫的代碼進行儲存然後退出。

2.算術運算執行個體

算術是數學中最古老、最基礎和最初等的部分,它研究的是數的性質和運算。從數學的本質上來說,算術屬于一種映射,是一種獲得新變量的可能組合。而常說的從算術中所得到的新變量,其實是由算術式的運算得到的。

算術式是由運算符和操作數組成,如:3+6。其中的運算符為加号(+),而操作數為3和6,所映射得到的新量為 9。在算術式中,其可以包含變量、變量擴充。在進行算術計算前,變量會被替換,而在括号内的變量也會被展開。

3+6=9的加法運算,是一個最為常見的一進制運算,在本質上是A+B→C的映射方式。其他常見的運算還有減法、乘法以及開方等,它們都屬于一進制運算,本質上是A→B形式的映射。

算術運算由運算符和操作數組成,由它們映射成一個新的量,下面是一個沒有包括任何變量擴充的算術例子。

【學習】Linux Shell腳本執行個體之一 - 西秀嶺

在算術中,運算符為加号,其操作數為3 和6,在做這個運算時并不需要進行變量展開就可以直接得到結果為9。而在一些需要包含變量以及變量擴充時,在運算之前則需要擴充變量,如下例所示。

【學習】Linux Shell腳本執行個體之一 - 西秀嶺

由于存在變量擴充,是以在運算前需要擴充變量。其操作流程是:若變量 i 的值不存在,則${i:-3}展開後其值為3,之後再與6做加法運算,其最後的結果為9。而若變量i存在值,則在擴充後取i的值,然後再與6相加。

在求值運算過程中,由于變量值不存在或者當其值為空時,該變量的值預設為0。

在一個存在變量的算術運算式中,在引用變量的值之前需要先定義,然後才可以引用。若變量沒有賦予值,則在引用時視它為0。

事實上,乘除法運算與加減法也非常類似,隻要将運算符修改并注意在進行除法運算時除數與被除數的一些問題就可以了。

如下:

【學習】Linux Shell腳本執行個體之一 - 西秀嶺
【學習】Linux Shell腳本執行個體之一 - 西秀嶺