case語句主要適用於如下狀況:某個變量存在多種取值,須要對其中的每一種取值分別執行不一樣的命令序列。這種狀況與多分支的If語句很是類似,只不過if與據須要判斷多個不一樣的條件按,而case只是判斷一個變量的不一樣取值。vim
檢查用戶輸入的字符類型
提示用戶從鍵盤輸入一個字符,經過case語句判斷該字符是否爲字母,數字或者其餘控制字符,並給出相應的提示信息bash
#!/bin/bash read -p "請輸入一個字符" key case $key in [a-z]|[A-Z]) echo "你輸入的是字母" ;; [0-9]) echo "你輸入的是數字" ;; *) echo "你輸入的是特殊符號" esac ~
[root@localhost ~]# ./1.sh 請輸入一個字符a 你輸入的是字母 [root@localhost ~]# ./1.sh 請輸入一個字符S 你輸入的是字母 [root@localhost ~]# ./1.sh 請輸入一個字符3 你輸入的是數字 [root@localhost ~]# ./1.sh 請輸入一個字符& 你輸入的是特殊符號
使用for循環語句時,須要指定一個變量及可能的取值列表,針對每個不一樣的取值重複執行相同的命令序列,直到變量值用完退出循環。在這裏,「取值列表」稱爲for語句的執行條件,其中多個屬性相同的對象,須要預先指定。ide
根據姓名批量添加用戶帳號,並設置初始密碼「123456」測試
1.1先作一個姓名的列表文件 [root@localhost ~]# vim /root/users.txt chenwen zhangsan wangwu lisi ~
1.2批量添加用戶和設置密碼 [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測試並執行結果 [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
一位同窗查看本身的分數
3d
#!/bin/bash read -p "請輸入你的分數(0-100)" scoure case $scoure in [8-9][0-9]|100) echo "成績優秀" ;; 7[0-9]) echo "成績良好" ;; 6[0-9]) echo "成績合格" ;; [0-9]|[1-5][0-9]) echo "成績不合格" ;; *) echo "輸入有誤,請從新輸入" esac ~
[root@localhost ~]# ./e.sh 請輸入你的分數(0-100)90 成績優秀 [root@localhost ~]# ./e.sh 請輸入你的分數(0-100)75 成績良好 [root@localhost ~]# ./e.sh 請輸入你的分數(0-100)51 成績不合格 [root@localhost ~]# ./e.sh 請輸入你的分數(0-100)123 輸入有誤,請從新輸入
使用while循環語句時,能夠根據特定的條件反覆執行一個命令序列,直到該條件再也不知足時爲止。在腳本應用中,
應該避免死循環的狀況,不然後邊的命令操做將沒法執行。所以,循環體內的命令序列中應包括修改測試條件的語句,以便再適當的時候事測試條件再也不成立,從而結束循環。code
批量添加用戶20個用戶帳號,名稱依次爲stt1,stu2 ...stt20,並設置密碼123456對象
[root@localhost ~]# vim 3.shblog
#/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
猜價格,猜商品的價格
要求:生成一個隨機的價格數目(0——999)做爲實際價格,判斷用戶猜想的價格過高或過低,一直讓用戶猜中實際價格爲止,輸出用戶猜想的次數和實際價格it
#!/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 ~
[root@localhost ~]# chmod +x 4.sh [root@localhost ~]# ./4.sh 商品的實際價格範圍爲0~999,猜猜看是多少? 請輸入你猜想的價格數目:345 過低了! 請輸入你猜想的價格數目:456 過低了! 請輸入你猜想的價格數目:678 過高了! 請輸入你猜想的價格數目:378 過低了! 請輸入你猜想的價格數目:400 過低了! 請輸入你猜想的價格數目:450 過低了! 請輸入你猜想的價格數目:455 過低了! 請輸入你猜想的價格數目:456 過低了! 請輸入你猜想的價格數目:567 過低了! 請輸入你猜想的價格數目:589 過高了! 請輸入你猜想的價格數目:580 過低了! 請輸入你猜想的價格數目:581 恭喜你答對了,實際價格是581 你總共猜想了12次