Shell腳本 (三)for循環 while循環 case分支語句

################for循環語句的結構#############
使用for循環語句時,需要指定一個變量及可能的取值列表,針對每個不同的取值重複執行相同的命令序列,直到變量值用完退出循環。在這裏,取值表 稱爲for語句的執行條件,其中包括多個屬性相同的對象、需要預先指定(如通訊錄、IP黑名單)
·
語法樣式
for 變量名 in 取值列表
do
  命令序列
done
·
#####for循環語句列子####
需求:根據人事部門給出的員工姓名拼音列表,在Linux服務器中添加相應的用戶賬號,
初始密碼均設置爲“123456”,其中,員工列表的賬戶數量不固定,不相同。
·
1.編輯文本
[root@localhost ~]# cd /opt
[root@localhost opt]# vi users.txt
zhang3
li4
wang5
sun6
2.編輯腳本
##創建多個用戶
[root@localhost opt]# vi uaddfor.sh
#!/bin/bash
ULIST=$(cat /opt/users.txt)
for UNAME in $ULIST
do
useradd $UNAME
echo "123456" | passwd --stdin $UNAME &>/dev/null
done
·
##刪除uaddfor.sh腳本添加的用戶
cd opt
vi udelfor.sh
#!/bin/bash
ULIST=$(cat /opt/users.txt)
for UNAME in $ULIST
do
userdel -r $UNAME &>/dev/null
id $UNAME
done
·
##IP地址檢查主機狀態
[root@localhost opt]# vi ipadds.txt
192.168.10.1
192.168.10.2
192.168.10.3
192.168.10.4
·
[root@localhost opt]# vi chkhosts.sh
#!/bin/bash
HLIST=$( cat /opt/ipadds.txt )
for IP in $HLIST
do
ping -c 3 -i 0.2 -W 3 $IP &> /dev/null
if [ $? -eq 0 ]
then
echo "host $IP is up."
else
echo "host $IP is down."
fi
done
[root@localhost opt]# chmod +x chkhosts.sh
[root@localhost opt]# ./chkhosts.sh
host 192.168.32.1 is down.
host 192.168.32.2 is up.
host 192.168.32.3 is down.
host 192.168.32.11 is up.
·
#############while循環語句的結構###########
for循環語句非常適合列表對象無規則,且列表來源固定的場合,而對於需求控制的循環次數,操作對象按數字順序的編號,按特定的條件執行重複操作等情況,則更適合使用一種循環語句----while語句。
while語句使用流程:首先判斷while後條件測試操作結果,如果條件成立,則執行do......done循環體;返回while後,再次判斷條件測試結果,如果條件仍然成立,則繼續折行循環體;再次返回while後,判斷條件測試結果........如此循環,直到while後的條件測試結果不在成立爲止,最後跳到done語句,表示循環結束。
whlie特點:重複測試某個條件,只要條件成立則反覆執行
·
語法樣式
while 條件測試操作
do
命令序列
done
·
#####while循環語句實例#####
批量添加用戶
用戶名稱以stu開頭,按數字順序進行編號
一共添加20個用戶,即stu1、stu2、……、stu20
初始密碼均設爲123456
·
[root@localhost opt]# vi uaddwhile.sh
#!/bin/bash
PREFIX="stu"
i=1
while [ $i -le 20 ]
do
useradd ${PREFIX}$i
echo "123456" | passwd --stdin ${PREFIX}$i &> /dev/null
let i++
done
[root@localhost opt]# chmod +x uaddwhile.sh
[root@localhost opt]# ./uaddwhile.sh
·
###刪除用戶###
[root@localhost opt]# cd /opt
[root@localhost opt]# vi udelwhile.sh
#!/bin/bash
PERFIX="stu"
i=1
while [ $i -le 20 ]
do
userdel -r ${PERFIX}$i
let i++
done
[root@localhost opt]# chmod +x udelwhile.sh
[root@localhost opt]# ./udelwhile.sh
·
·
###實例2###
猜商品價格遊戲
通過變量RANDOM獲得隨機數
提示用戶猜測並記錄次數,猜中後退出循環
·
[root@localhost opt]# vi pricegame.sh
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "商品的實際價格範圍0-999,猜猜看是多少"
while true
do
read -p "請輸入你猜猜的價格數目:" INT
let TIMES++
if [ $INT -eq $PRICE ] ; then
echo "恭喜你答對了,實際價格是 $PRICE"
echo "您總共猜對了 $TIMES 次"
exit 0
elif [ $INT -gt $PRICE ] ; then
echo "太高了!"
else
echo "太低了!"
fi
done
·
###解釋###
1、while true 是代表無限循環下去
2、$RANDOM是Bash的內部函數,隨機取值範圍在0 - 32767之間
·
[root@localhost opt]# chmod +x pricegame.sh
[root@localhost opt]# ./pricegame.sh
商品的實際價格範圍0-999,猜猜看是多少
請輸入你猜猜的價格數目:900
太高了!
請輸入你猜猜的價格數目:800
太高了!

請輸入你猜猜的價格數目:325
恭喜你答對了,實際價格是 325
您總共猜對了 13 次
·
#############case分支語句的結構#############
針對變量的不同取值,分別執行不同的命令序列
·
###語法樣式
case 變量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
 ……
)
默認命令序列
esac
·
###case使用特點
·
case行尾必須爲單詞"in",每一模式必須以")"結束
雙分號";;" 表示命令序列結束
模式字符串中,可以用方括號表示已個連續的範圍,如"[0-9]";還可以用豎槓符號"|"表示,如"A|B"
最後的"
" 表示默認模式,其中的相當於通配符。
·
###示例1
擊鍵類型識別
提示用戶輸入一個字符
判斷出該字符是字母、數字或者其他字符
·
vi hitkey.sh
#!/bin/bash
read -p "請輸入一個字符,並Enter鍵確認:" KEY
case "$KEY" in
[a-z] | [A-Z])
echo "您輸入的是 字母."
;;
[0-9])
echo "您輸入的是 數字."
;;
)
echo "您輸入的是 空格、功能鍵或者是其他控制字符."
esac
·
[root@localhost opt]# chmod +x hitkey.sh
[root@localhost opt]# ./hitkey.sh
請輸入一個字符,並Enter鍵確認:A
您輸入的是 字母.
[root@localhost opt]# ./hitkey.sh
請輸入一個字符,並Enter鍵確認:a
您輸入的是 字母.
[root@localhost opt]# ./hitkey.sh
請輸入一個字符,並Enter鍵確認:1
您輸入的是 數字.
[root@localhost opt]# ./hitkey.sh
請輸入一個字符,並Enter鍵確認:
您輸入的是 空格、功能鍵或者是其他控制字符.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章