溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Shell腳本中for循環(huán)、while循環(huán)及case分支語句怎么用

發(fā)布時間:2022-01-24 10:04:10 來源:億速云 閱讀:146 作者:iii 欄目:開發(fā)技術

本篇內(nèi)容主要講解“Shell腳本中for循環(huán)、while循環(huán)及case分支語句怎么用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Shell腳本中for循環(huán)、while循環(huán)及case分支語句怎么用”吧!

for、while在多個編程語言中都涉及到,但是用法卻略有不同,這篇文章將和大家分享一下在shell中for循環(huán)、while循環(huán)及case分支語句。

使用for循環(huán)語句

在工作中,經(jīng)常遇到某項任務需要多次執(zhí)行,而每次執(zhí)行僅僅是處理對象不一樣,其他命令都相同。使用簡單的if語句已經(jīng)難以滿足要求,編寫全部代碼將困難重重,而for循環(huán)語句將很好的解決類似的問題

1. for語句的結(jié)構(gòu)

使用for循環(huán)語句時,需要指定一個變量及可能的取值列表,針對每一個不同的取值重復執(zhí)行相同的命令,直到變量值用完退出循環(huán)

案例1:根據(jù)姓名列表批量建立用戶

 [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:根據(jù)IP地址列表檢測主機狀態(tài)

 [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循環(huán)語句

for語句適用于列表對象無規(guī)律,且列表來源以固定的場合。而對于要求控制循環(huán)次數(shù)、操作對象按數(shù)字順序編號、按特定的條件重復操作等情況,則更適合于while循環(huán)語句

1. while語句的結(jié)構(gòu)

使用while循環(huán)語句時,可以根據(jù)特定的條件反復執(zhí)行一個命令序列,直到該條件不在滿足為止

案例1:批量添加規(guī)律編號的用戶(“l(fā)et 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:猜價格游戲

案例要求如下:腳本預先隨機生成一個價格數(shù)目(1-999)作為實際價格,判斷用戶給出的價格是否正確,給出相應的提示后再次猜測。直到猜對價格為止,輸出用戶共猜測的次數(shù)、實際價格

設計思路:通過環(huán)境變量獲得一個小于2的16次方隨機整數(shù),計算與1000的余數(shù)即可獲得0-999的隨機價格;反復猜測可通過true作為測試條件的while循環(huán)實現(xiàn)

 [root@localhost ~]# vim game.sh #!/bin/bash PRICE=$(expr $RANDOM % 1000) TIMES=0 echo "商品實際價格為0-999之間,猜猜看是多少?" while true do     read -p "請輸入你猜測的價格數(shù)目:" 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之間,猜猜看是多少? 請輸入你猜測的價格數(shù)目:500 太高了! 請輸入你猜測的價格數(shù)目:250 太低了! 請輸入你猜測的價格數(shù)目:375 太高了! 請輸入你猜測的價格數(shù)目:280 太高了! 請輸入你猜測的價格數(shù)目:265 太高了! 請輸入你猜測的價格數(shù)目:253 恭喜你答對了,實際價格是 253 你總共猜測了 6 次

使用case分支語句

case語句主要適用于以下情況:某個變量存在多種取值,需要對其中的每一種取值分別執(zhí)行不同的命令序列。與多分支if語句相識,只是if語句需要判斷多個不同的條件,而case只是判斷一個變量的不同取值

1. case語句的結(jié)構(gòu)

案例1:檢測用戶輸入的字符類型

 [root@localhost ~]# cat hitkey.sh #!/bin/bash read -p "請輸入一個字符,并按Enter鍵確認:" KEY case "$KEY" in   [a-z]|[A-Z])       echo "您輸入的是 字母。"       ;;   [0-9])       echo "您輸入的是 數(shù)字。"       ;;   *)       echo "您輸入的是 空格、功能鍵或其他控制字符。" esac  [root@localhost ~]# sh hitkey.sh 請輸入一個字符,并按Enter鍵確認:k 您輸入的是 字母 k 。 [root@localhost ~]# sh hitkey.sh 請輸入一個字符,并按Enter鍵確認:8 您輸入的是 數(shù)字 8 。 [root@localhost ~]# sh hitkey.sh 請輸入一個字符,并按Enter鍵確認:[19~ 您輸入的是 空格、功能鍵或其他控制字符。

案例2:編寫系統(tǒng)服務腳本(測試)

 [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循環(huán)、while循環(huán)及case分支語句怎么用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI