您好,登錄后才能下訂單哦!
本篇內容主要講解“Shell腳本中for循環、while循環及case分支語句怎么用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Shell腳本中for循環、while循環及case分支語句怎么用”吧!
使用for循環語句
在工作中,經常遇到某項任務需要多次執行,而每次執行僅僅是處理對象不一樣,其他命令都相同。使用簡單的if語句已經難以滿足要求,編寫全部代碼將困難重重,而for循環語句將很好的解決類似的問題
1. for語句的結構
使用for循環語句時,需要指定一個變量及可能的取值列表,針對每一個不同的取值重復執行相同的命令,直到變量值用完退出循環
案例1:根據姓名列表批量建立用戶
[root@localhost ~]# vim /root/users.txt yang shu fan [root@localhost ~]# vim uaddfor.sh #!/bin/bash ULIST=$(cat /root/users.txt) for UNAME in $ULIST do useradd $UNAME echo "123456" | passwd --stdin $UNAME done [root@localhost ~]# sh uaddfor.sh [root@localhost ~]# tail -3 /etc/passwd yang:x:1011:1011::/home/chenye:/bin/bash shu:x:1012:1012::/home/dengchao:/bin/bash fan:x:1013:1013::/home/zhangjie:/bin/bash
案例2:根據IP地址列表檢測主機狀態
[root@localhost ~]# vim /root/ipadds.txt 192.168.1.10 192.168.1.11 192.168.1.12 [root@localhost ~]# vim chkhosts.sh #!/bin/bash HLIST=$(cat /root/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 ~]# sh chkhosts.sh Host 192.168.1.10 is up. Host 192.168.1.11 is down. Host 192.168.1.12 is up.
使用while循環語句
for語句適用于列表對象無規律,且列表來源以固定的場合。而對于要求控制循環次數、操作對象按數字順序編號、按特定的條件重復操作等情況,則更適合于while循環語句
1. while語句的結構
使用while循環語句時,可以根據特定的條件反復執行一個命令序列,直到該條件不在滿足為止
案例1:批量添加規律編號的用戶(“let i++”等同于“i=expr $i + 1”)
[root@localhost ~]# vim uaddwhile.sh #!/bin/bash PREFIX="ysf" i=1 while [ $i -le 20 ] do useradd ${PREFIX}$i echo "123456" | passwd --stdin ${PREFIX}$i &> /dev/null let i++ done [root@localhost ~]# sh uaddwhile.sh [root@localhost ~]# grep "ysf" /etc/passwd | tail -3 ysf18:x:1028:1028::/home/stu18:/bin/bash ysf19:x:1029:1029::/home/stu19:/bin/bash ysf20:x:1030:1030::/home/stu20:/bin/bash
案例2:猜價格游戲
案例要求如下:腳本預先隨機生成一個價格數目(1-999)作為實際價格,判斷用戶給出的價格是否正確,給出相應的提示后再次猜測。直到猜對價格為止,輸出用戶共猜測的次數、實際價格
設計思路:通過環境變量獲得一個小于2的16次方隨機整數,計算與1000的余數即可獲得0-999的隨機價格;反復猜測可通過true作為測試條件的while循環實現
[root@localhost ~]# vim game.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 [root@localhost ~]# sh pricegame.sh 商品實際價格為0-999之間,猜猜看是多少? 請輸入你猜測的價格數目:500 太高了! 請輸入你猜測的價格數目:250 太低了! 請輸入你猜測的價格數目:375 太高了! 請輸入你猜測的價格數目:280 太高了! 請輸入你猜測的價格數目:265 太高了! 請輸入你猜測的價格數目:253 恭喜你答對了,實際價格是 253 你總共猜測了 6 次
使用case分支語句
case語句主要適用于以下情況:某個變量存在多種取值,需要對其中的每一種取值分別執行不同的命令序列。與多分支if語句相識,只是if語句需要判斷多個不同的條件,而case只是判斷一個變量的不同取值
1. case語句的結構
案例1:檢測用戶輸入的字符類型
[root@localhost ~]# cat hitkey.sh #!/bin/bash read -p "請輸入一個字符,并按Enter鍵確認:" KEY case "$KEY" in [a-z]|[A-Z]) echo "您輸入的是 字母。" ;; [0-9]) echo "您輸入的是 數字。" ;; *) echo "您輸入的是 空格、功能鍵或其他控制字符。" esac [root@localhost ~]# sh hitkey.sh 請輸入一個字符,并按Enter鍵確認:k 您輸入的是 字母 k 。 [root@localhost ~]# sh hitkey.sh 請輸入一個字符,并按Enter鍵確認:8 您輸入的是 數字 8 。 [root@localhost ~]# sh hitkey.sh 請輸入一個字符,并按Enter鍵確認:[19~ 您輸入的是 空格、功能鍵或其他控制字符。
案例2:編寫系統服務腳本(測試)
[root@localhost ~]# vim /etc/init.d/myprog #!/bin/bash # chkconfig: - 90 10 # description: Startup script for sleep Server case "$1" in start) ... 正在啟動XX服務 ;; stop) ... 正在停止XX服務 ;; restart) $0 stop $0 start ;; *) echo "用法: $0 {start|stop|restart}" esac [root@localhost ~]# chkconfig --add myprog [root@localhost ~]# chkconfig --list myprog myprog 0:關閉 1:關閉 2:關閉 3:關閉 4:關閉 5:關閉 6:關閉 [root@localhost ~]# /etc/init.d/myprog start 正在啟動sleep服務... OK [root@localhost ~]# /etc/init.d/myprog stop 正在停止sleep服務... OK [root@localhost ~]# /etc/init.d/myprog reload 用法: ./myprog {start|stop|restart} [root@localhost ~]# /etc/init.d/myprog restart 正在停止sleep服務... OK 正在啟動sleep服務... OK
到此,相信大家對“Shell腳本中for循環、while循環及case分支語句怎么用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。