case語句主要適用于以下情況:某個變量存在多種取值,需要對其中的每一種取值分別執(zhí)行不同的命令序列。這種情況與多分支的If語句非常相似,只不過if與據(jù)需要判斷多個不同的條件按,而case只是判斷一個變量的不同取值。
檢查用戶輸入的字符類型
提示用戶從鍵盤輸入一個字符,通過case語句判斷該字符是否為字母,數(shù)字或者其他控制字符,并給出相應(yīng)的提示信息
#!/bin/bash
read -p "請輸入一個字符" key
case $key in
[a-z]|[A-Z])
echo "你輸入的是字母"
;;
[0-9])
echo "你輸入的是數(shù)字"
;;
*)
echo "你輸入的是特殊符號"
esac
~
[root@localhost ~]# ./1.sh
請輸入一個字符a
你輸入的是字母
[root@localhost ~]# ./1.sh
請輸入一個字符S
你輸入的是字母
[root@localhost ~]# ./1.sh
請輸入一個字符3
你輸入的是數(shù)字
[root@localhost ~]# ./1.sh
請輸入一個字符&
你輸入的是特殊符號
使用for循環(huán)語句時,需要指定一個變量及可能的取值列表,針對每一個不同的取值重復(fù)執(zhí)行相同的命令序列,直到變量值用完退出循環(huán)。在這里,“取值列表”稱為for語句的執(zhí)行條件,其中多個屬性相同的對象,需要預(yù)先指定。
根據(jù)姓名批量添加用戶賬號,并設(shè)置初始密碼“123456”
1.1先做一個姓名的列表文件
[root@localhost ~]# vim /root/users.txt
chenwen
zhangsan
wangwu
lisi
~
1.2批量添加用戶和設(shè)置密碼
[root@localhost ~]# vim uaddfor.sh
#!/bin/bash
ULIST=$(cat /root/users.txt)
for UNAME in $ULIST
do
useradd $UNAME
echo "123456" | passwd --stdin $UNAME &>/dev/null
done
~
~
1.3測試并執(zhí)行結(jié)果
[root@localhost ~]# chmod +x uaddfor.sh
[root@localhost ~]# ./uaddfor.sh
[root@localhost ~]# tail -4 /etc/passwd
chenwen:x:1021:1021::/home/chenwen:/bin/bash
zhangsan:x:1022:1022::/home/zhangsan:/bin/bash
wangwu:x:1023:1023::/home/wangwu:/bin/bash
lisi:x:1024:1024::/home/lisi:/bin/bash
一位同學(xué)查看自己的分?jǐn)?shù)
#!/bin/bash
read -p "請輸入你的分?jǐn)?shù)(0-100)" scoure
case $scoure in
[8-9][0-9]|100)
echo "成績優(yōu)秀"
;;
7[0-9])
echo "成績良好"
;;
6[0-9])
echo "成績合格"
;;
[0-9]|[1-5][0-9])
echo "成績不合格"
;;
*)
echo "輸入有誤,請重新輸入"
esac
~
[root@localhost ~]# ./e.sh
請輸入你的分?jǐn)?shù)(0-100)90
成績優(yōu)秀
[root@localhost ~]# ./e.sh
請輸入你的分?jǐn)?shù)(0-100)75
成績良好
[root@localhost ~]# ./e.sh
請輸入你的分?jǐn)?shù)(0-100)51
成績不合格
[root@localhost ~]# ./e.sh
請輸入你的分?jǐn)?shù)(0-100)123
輸入有誤,請重新輸入
使用while循環(huán)語句時,可以根據(jù)特定的條件反復(fù)執(zhí)行一個命令序列,直到該條件不再滿足時為止。在腳本應(yīng)用中,
應(yīng)該避免死循環(huán)的情況,否則后邊的命令操作將無法執(zhí)行。因此,循環(huán)體內(nèi)的命令序列中應(yīng)包括修改測試條件的語句,以便再適當(dāng)?shù)臅r候事測試條件不再成立,從而結(jié)束循環(huán)。
批量添加用戶20個用戶賬號,名稱依次為stt1,stu2 ...stt20,并設(shè)置密碼123456
[root@localhost ~]# vim 3.sh
#/bin/bash
PREFLX="stt"
i=1
while [ $i -le 20 ]
do
useradd ${PREFLX}$i
echo "123456" | passwd --stdin ${PREFLX}$i &> /dev/null
let i++
done
[root@localhost ~]# chmod +x 3.sh
[root@localhost ~]# ./3.sh
[root@localhost ~]# tail -3 /etc/passwd
stt18:x:1042:1042::/home/stt18:/bin/bash
stt19:x:1043:1043::/home/stt19:/bin/bash
stt20:x:1044:1044::/home/stt20:/bin/bash
猜價格,猜商品的價格
要求:生成一個隨機(jī)的價格數(shù)目(0——999)作為實(shí)際價格,判斷用戶猜測的價格太高或太低,一直讓用戶猜中實(shí)際價格為止,輸出用戶猜測的次數(shù)和實(shí)際價格
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "商品的實(shí)際價格范圍為0~999,猜猜看是多少?"
while true
do
read -p "請輸入你猜測的價格數(shù)目:" INT
let TIMES++
if [ $INT -eq $PRICE ];then
echo "恭喜你答對了,實(shí)際價格是$PRICE"
echo "你總共猜測了$TIMES次"
exit 0
elif [ $INT -gt $PRICE ];then
echo "太高了!"
else
echo "太低了!"
fi
done
~
[root@localhost ~]# chmod +x 4.sh
[root@localhost ~]# ./4.sh
商品的實(shí)際價格范圍為0~999,猜猜看是多少?
請輸入你猜測的價格數(shù)目:345
太低了!
請輸入你猜測的價格數(shù)目:456
太低了!
請輸入你猜測的價格數(shù)目:678
太高了!
請輸入你猜測的價格數(shù)目:378
太低了!
請輸入你猜測的價格數(shù)目:400
太低了!
請輸入你猜測的價格數(shù)目:450
太低了!
請輸入你猜測的價格數(shù)目:455
太低了!
請輸入你猜測的價格數(shù)目:456
太低了!
請輸入你猜測的價格數(shù)目:567
太低了!
請輸入你猜測的價格數(shù)目:589
太高了!
請輸入你猜測的價格數(shù)目:580
太低了!
請輸入你猜測的價格數(shù)目:581
恭喜你答對了,實(shí)際價格是581
你總共猜測了12次
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。