1.程序流程控制實例
程序流程控制,實際上就是改變程序的執行順序。程序在執行過程中若流程被改變,就可能導致輸出不同,因此利用這一特性就能夠實現程序執行結果的控制。程序流程控制可分為“選擇”和“循環”這兩類,在需要根據實際需求的不同實現不同的輸出時,就可以改變程序的執行流程。
(1)for循環語句
基於for語句的循環,基於繼續執行循環或者結束循環的方式。在for執行命令前,其會先檢查所要執行的列表中所指定的值是否還有未使用的,若有未使用的就賦值並執行列表,直到列表中的值全部都使用過后才退出循環。
如下是一個簡單的 for 控制語句的腳本程序,其使用“星期”作為變量名,並從列表中讀取值,直到讀取完成后退出。

我們執行一下

說明:
第03 行,所定義的變量名為week,其值為Monday~ Sunday。
第05行,使用echo回顯變量week的值。
(2)while循環語句
while循環語句結構是一種執行一系列命令的語句結構,它所執行的命令由測試條件所決定,這些條件定義語句是否繼續執行。
在 while 循環語句中執行命令,若條件為真,則將過程執行一遍並回到開始處,接着再次進行條件的判斷,若條件仍然是真,則接着再執行一遍,直到條件為假時才退出循環。如下是一個數值運算的while循環腳本,其實現的是數值相加運算。

執行一下看一下結果

說明:
第03和04行,聲明x和sum都為整型變量並賦予初始值。
第05行,條件測試。
第06~09行,這是一個循環體,當執行遇到done后,跳到第06行處繼續執行,直到條件不滿足時退出循環。
第10行,輸出總數值。
(3)until循環語句
與for和while循環體一樣,until循環也執行一系列的命令,直到條件滿足后退出循環。until循環在循環體的頂部繼續判斷條件,直到條件為真時結束循環,否則一直執行。
以下腳本使用until語句來實現一個簡單的、不斷循環的輸出預設值,直到人為干預時結束循環(按Ctrl+C組合鍵退出)。

(4)if選擇分支語句

看一下執行結果:

說明:
第03行,使用cat命令從當前目錄的testwhile.sh文件中讀取信息,然后通過管道傳送到grep命令進行過濾。其中,^ 表示檢查的關鍵字是該行的開始。
第04行,若所需查看的信息存在,則輸出提示。
第05行,if語句結束的標記。
if語句的另外一種結構是if-then-else,這種if語句可以實現先判斷,然后根據判斷的結果選擇執行腳本代碼塊,也就是說,不管條件判斷的結果怎么樣都有輸出。如下實例的主要作用是將讀取到的數值與預設值對比,然后根據對比結果執行代碼。

看一下執行結果:

說明:
第03行:提示用戶輸入。
第04行,讀取用戶的輸入並放到JOB變量中。
第05~10行,判斷輸入的值並執行對應的代碼塊。
(5)case選擇語句
若需要判斷的條件達到一定數量,仍選擇使用if語句來實現,語句就會變得不易編寫且代碼變得沉長,同時也給日后的維護工作帶來不便。
case語句的出現,在很大程度上彌補了if語句的不足,case語句允許通過條件的判斷選擇執行不同的代碼塊。但需要注意的是,case對變量的使用不是強制性的,且每條語句都以右小括號結尾,每個代碼塊都以兩個分號結尾。
通過case結構來實現為多分支功能,可以使程序代碼不但易讀而且其結構更加簡潔。下面使用case結構來實現一個名字檢索腳本,腳本中的變量值在條件成立時就執行相應代碼。腳本的命令讀取輸入信息,並判斷是否存在所輸入的信息,之后就執行相應的代碼塊。
對於以上的問題,可以,看如下的例子。

運行結果:

說明:
第04行,$name中的值為待測變量。
第06行,需要與待測變量值對比的預設值。
第09行,輸出一個空行。
第11行,如果第05行的值與預設值都不同,則對比此處的值。
第16行,case語句結束的標記。
完成之后,將所寫的代碼進行保存然后退出。
2.算術運算實例
算術是數學中最古老、最基礎和最初等的部分,它研究的是數的性質和運算。從數學的本質上來說,算術屬於一種映射,是一種獲得新變量的可能組合。而常說的從算術中所得到的新變量,其實是由算術式的運算得到的。
算術式是由運算符和操作數組成,如:3+6。其中的運算符為加號(+),而操作數為3和6,所映射得到的新量為 9。在算術式中,其可以包含變量、變量擴展。在進行算術計算前,變量會被替換,而在括號內的變量也會被展開。
3+6=9的加法運算,是一個最為常見的一元運算,在本質上是A+B→C的映射方式。其他常見的運算還有減法、乘法以及開方等,它們都屬於一元運算,本質上是A→B形式的映射。
算術運算由運算符和操作數組成,由它們映射成一個新的量,下面是一個沒有包括任何變量擴展的算術例子。

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

由於存在變量擴展,因此在運算前需要擴展變量。其操作流程是:若變量 i 的值不存在,則${i:-3}展開后其值為3,之后再與6做加法運算,其最后的結果為9。而若變量i存在值,則在擴展后取i的值,然后再與6相加。
在求值運算過程中,由於變量值不存在或者當其值為空時,該變量的值默認為0。
在一個存在變量的算術運算式中,在引用變量的值之前需要先定義,然后才可以引用。若變量沒有賦予值,則在引用時視它為0。
事實上,乘除法運算與加減法也非常類似,只要將運算符修改並注意在進行除法運算時除數與被除數的一些問題就可以了。
如下:

