條件語句用於在運行操作之前做一個測試。在前面的章節中,我們看到了模式匹配規則的一些演示樣例。
模式匹配規則本質上就是影響輸入循環的條件表達式。
在這一部分,我們主要就在action中所使用的條件語句進行探討。
條件語句以if開頭,並計算放在圓括號里的表達式。
語法是:
action1
[ else
action2 ]
假設條件表達式expression的值為真(非零或非空)。就運行action1 。
當存在else語句時。假設條件表達式的值為假(零或空) 。則運行action2。一個條件表達式可能包括算術運算符、關系操作符、或布爾操作符。這些都在awk腳本中討論過。
或許最簡單的條件表達式是測試一個變量是否非零。
假設x是零, print語句將不運行。假設x是一個非零值,將打印x的值。也能夠測試x是否等於還有一個值:
注意。 "=="是關系操作符而"="是賦值操作符。我們還能夠用模式匹配操作符"~"來測試x是否與一個模式匹配:
下面是幾個補充的語法要點。假設操作時由多個語句組成的,要用一對大括號將操作括起來。
statement1
statement2
}
awk對大括號和語句的位置沒有特殊的要求(和sed不同)。左大括號放在條件表達式后面,能夠與條件表達式位於一行也能夠在下一行。第一條語句能夠緊跟左大括號或從下一行開始。右大括號放在最好一條語句的后面。能夠與最后一條語句位於同一行也能夠在下一行。在大括號的前后同意有空格或制表符。
盡管沒有要求語句縮進書寫,但這樣能夠改善可讀性。
右大括號和else后面的換行符是可選的。
[ else action2 ]
假設在action1后面加一個分號表示結束。 action1后面的換行也是可選的。
假設在同一行上用分號分隔多個語句。相同須要使用大括號。
在前面的文章中,我們曾看見過一段腳本用於計算學生平均成績。我們能夠用一個條件來推斷某個學生是否及格。
grade = "Pass"
else
grade = "Fail"
賦給grade的值取決於表達式"avg >=65" 的計算結果是真還是假。
能夠用多個條件語句來測試多個條件中的某個是否為真。比如,或許學生的成績要用字母分級表示,而不是用及格或不及格來表示。下面用一個條件結構依據學生的平均分來指定一個字母成績:
else if (avg >= 80 ) grade = "B"
else if (avg >= 70 ) grade = "C"
else if (avg >= 60 ) grade = "D"
else grade = "F"
應該注意到的一個重要事情是。這樣的連續條件僅僅有當一個條件表達式計算結果為真時才停止求值。這時將跳過其它的條件。
假設沒有一個條件表達式的計算結果為真,將執行最后的else部分,執行默認操作,在這樣的情況下為grade賦值"F" 。
參考資料:http://www.linuxawk.com/communication/543.html