第一篇 shell腳本中的if語句
一、shell腳本的語句控制
□前面提到了過程式編程語言有三種過程:
順序執行:按照順序一條一條語句執行;
選擇執行:按照條件進行選擇執行;
循環執行:按照給定的循環條件進行循環執行。
□其中,順序不需要特定的控制,只需按照語句依次執行即可;選擇執行,則需要特定的控制語句(如:if,case)來判斷執行;循環執行則需要特定的循環控制控制(如:for,while等)。
二、使用read 命令來接受輸入
□在bash腳本編程過程當中有時程序需要與用戶之間進行交互,如提示用戶輸入一些參數等,此時,我們可以使用read命令來完成此功能
□語法:read [option]…[name]
-p :“說明信息” (指示要顯示的提示)
-t :TIMEOUT
注意:read從標準輸入中讀取值,給每個單詞分配一個變量,所有剩余單詞都被分配給最后一個變量
示例:read -p “Enter a filename:“ FILE
三、條件選擇if語句
□選擇執行:
注意:if語句可嵌套(if是一個關鍵字,不是一個命令。)
?單分支
if 判斷條件;then
條件為真的分支代碼
fi
?雙分支
if 判斷條件; then
條件為真的分支代碼
else
條件為假的分支代碼
fi
? □多分支
if CONDITION1; then
if-true
elif CONDITION2; then
if-ture
elif CONDITION3; then
if-ture
…
else
all-false
fi
從上而下逐條件進行判斷,第一次遇為“真”條件時,執行其分支,而后結束整個if語句
示例:
? 根據命令的退出狀態來執行命令
if ping-c1-W2station1 &> /dev/null;then
echo 'Station1isUP'
elif grep"station1"~/maintenance.txt &> /dev/null;then
echo 'Station1isundergoingmaintenance‘
else
echo'Station1isunexpectedlyDOWN!' exit1
fi
四、條件判斷case語句(離散值的匹配)
□ case 變量引用in
PAT1)
分支1
;;
PAT2)
分支2
;;
…
*)
默認分支
;;
esac
□case支持glob風格的通配符:
*: 任意長度任意字符
?: 任意單個字符
[]:指定范圍內的任意單個字符[adc](也可以表示范圍[1-10])
a|b: a或b
注意:1.if語句在使用過程中,可以實現多重嵌套,這里一定要注意書寫的格式,分好層次,不要寫亂了
2.case一般是在離散值的匹配當中用的較多,一定要注意書寫格式,不要寫錯了
3.在寫腳本的時候不能著急,要構思清新,每一種情況都要考慮到。
練習:
1、寫一個腳本/root/bin/createuser.sh,實現如下功能:使用一個用戶名做為參數,如果指定參數的用戶存在,就顯示其存在,否則添加之;顯示添加的用戶的id號等信息
2、寫一個腳本/root/bin/yesorno.sh,提示用戶輸入yes或no,并判斷用戶輸入的是yes還是no,或是其它信息
3、寫一個腳本/root/bin/filetype.sh,判斷用戶輸入文件路徑,顯示其文件類型(普通,目錄,鏈接,其它文件類型)
4、寫一個腳本/root/bin/checkint.sh,判斷用戶輸入的參數是否為正整數
五、循環語句
□循環執行
將某代碼段重復運行多次
□重復運行多少次:
循環次數事先已知
循環次數事先未知
□有進入條件和退出條件
□for, while, until
六、for循環
□語法:for 變量名in 列表;do
循環體
done
?執行機制:
依次將列表中的元素賦值給“變量名”; 每次賦值后即執行一次循環體; 直到列表中的元素耗盡,循環結束
□列表生成方式:
(1) 直接給出列表
(2) 整數列表:
(a) {start..end}
(b) $(seq[start [step]] end)
(3) 返回列表的命令
$(COMMAND)
(4) 使用glob,如:*.sh
(5) 變量引用;
$@, $*
六、while循環
□語法:while CONDITION; do
循環體
done
?CONDITION:循環控制條件;進入循環之前,先做一次判斷;每一次循環之后會再次做判斷;條件為“true”,則執行一次循環;直到條件測試狀態為“false”終止循環
因此:CONDTION一般應該有循環控制變量;而此變量的值會在循環體不斷地被修正
?進入條件:CONDITION為true;
?退出條件:CONDITION為false
七、until循環
□語法:until CONDITION; do
循環體
done
?進入條件:CONDITION 為false
?退出條件:CONDITION 為true
八、循環控制語句
1.用于循環體中
continue [N]:提前結束第N層的本輪循環,而直接進入下一輪判斷;最內層為第1層
break [N]:提前結束第N層循環,最內層為第1層
2.創建無限循環
?while true; do
循環體
done
?until false; do
循環體
done
for練習
1、判斷/var/目錄下所有文件的類型
2、添加10個用戶user1-user10,密碼同用戶名
3、/etc/rc.d/rc3.d目錄下分別有多個以K開頭和以S開頭的文件;分別讀取每個文件,以K開頭的文件輸出為文件加stop,以S開頭的文件輸出為文件名加start;
“K34filename stop”
“S66filename start”
4、寫一個腳本,提示輸入正整數n的值,計算1+2+3+…n的總和
5、寫一個腳本,提示請輸入網絡地址,如192.168.0.0,判斷輸入的網段中主機在線狀態
6、打印九九乘法表
while練習
1、求100以內所有正整數之和
2、通過ping命令探測172.16.250.1-254范圍內的所有主機的在線狀態,統計在線主機和離線主機各多少。
3、打印九九乘法表
4、利用變量RANDOM生成10個隨機數字,輸出這個10數字,并顯示其中的最大者和最小者
5、打印國際象棋棋盤
until練習
1、每隔3秒鐘到系統上獲取已經登錄的用戶的信息;如果發現用戶hacker登錄,則將登錄時間和主機記錄于日志/var/log/login.log中,并提示該用戶退出系統。
2、隨機生成10以內的數字,實現猜字游戲,提示比較大或小,相等則退出。
原創文章,作者:zhumengxiaotao,如若轉載,請注明出處:http://www.www58058.com/36300
都循環語句語法總結的較好,作業也完成的很出色,我們可以嘗試著在寫腳本的同時總結一些各個循環語句所適應的場景,以便于在以后使用過程中選擇最好的語句,這樣有利于我們節約腳本運行的時間,提高我們的工作效率哦。