while條件循環語句是一種讓腳本根據某些條件來重複執行命令的語句,它的循環結構往往在執行前並不確定最終執行的次數,完全不同於for循環語句中有目標,在範圍的使用場景。while循環語句通過判斷條件測試的真假來決定是否繼續執行命令,若條件為真就繼續執行,為假就結束循環。
接下來結合使用多分支的if條件測試語句與while條件循環語句,編寫一個用來猜測數值大小的腳本Guess.sh。該腳本使用$RANDOM變量來調取出一個隨機數值(範圍0~32767),將這個隨機數對1000進行取餘操作,並使用expr命令取得其結果,再用這個數值與用户通過read命令輸入的數值進行比較判斷。這個判斷語句分為三種情況,分別是判斷用户輸入的數值是等於,大於還是小於使用expr命令與的數值。當前,現在這些內容不是重點,我們當前要關注的是while條件循環語句中的條件測試始終為true,因此判斷語句會無限執行下去,直到用户輸入數值等於expr命令取得的數值後,這兩者相等之後才運行exit 0命令,終止腳本的執行。
在這個腳本中,我們添加了一些交互式的信息,從而使得用户與系統的互動性得以增強。而且每當循環到let TIMES++命令時都會讓TIMES變量內的數值加1,用來統計循環總計執行了多少次。這可以讓用户得知總共猜測了多少次之後,才才對價格。
case條件測試語句
case語句是在多個範圍內匹配數據,若匹配成功則執行相關命令並結束整個條件測試,而如果數據不在所列出的範圍內,則會執行星號(*)中所定義的默認命令。
在前文介紹的腳本中有一個致命的弱點——只能接受數字!你可以嘗試輸入字母,會發現腳本立刻會崩潰。原因是字母無法與數字進行比較大小,例如,“a是否大於等於3”這樣的命題是完全錯誤的。我們必須有一定的措施來判斷用户的輸入內容,當用户輸入的內容不是數字時,腳本能予以提示,從而免於崩潰。
通過在腳本中組合使用case條件命令測試語句和通配符,完全可以滿足這裏的需求。接下來我們編寫腳本提示用户輸入一個字符並將其賦值給變量,然後根據變量的值向用户顯示其值是字母,數字還是其他字符。
2020-09-27 18:27:35