您好,登錄后才能下訂單哦!
通過 Shell 腳本應(yīng)用(二)學(xué)習(xí)到了if條件條件語句的使用方法等。 Shell作為一種 腳本編程語言,同樣了包含了循環(huán),分支等其他程序控制結(jié)構(gòu),從而能夠輕松完成更加復(fù)雜、強大的功能。我們今天就來認識for、while、case語句的具體應(yīng)用。 |
在實際工作中,經(jīng)常會遇到某項任務(wù)需要多次執(zhí)行的情況,而每次執(zhí)行時僅僅是處理的對象不一樣,其他 命令相同。例如:根據(jù)通訊錄中的姓名列表創(chuàng)建系統(tǒng)賬號等情況。
當面對各種列表重復(fù)工作任務(wù)時,使用if語句已經(jīng)不能滿足需要了,就需要使用到for語句。
使用for循環(huán)語句時,需要指定一個變量及可能的取值列表,針對不同的取值重復(fù)執(zhí)行相同的 命令序列,知道變量值用完退出循環(huán)。
1)for循環(huán)語句的語法結(jié)構(gòu):
for 變量名 in 取值列表
do
命令序列
done
語句結(jié)構(gòu)中,for語句的操作對象為用戶吧指定名稱的變量,并通過in關(guān)鍵字為該變量預(yù)先設(shè)置了一個取值列表,多個取值之間用空格進行分隔。位于do……done之間的命令序列稱為循環(huán)體,其中的執(zhí)行語句需要應(yīng)用變量以完成相應(yīng)的任務(wù)。
2)for循環(huán)語句流程圖
3)for循環(huán)語句的使用場景
1. 循環(huán)次數(shù)未知;
2.完整遍歷整個取值列表。
要求:
1.根據(jù)姓名列表批量創(chuàng)建用戶;
2.用戶的初始密碼是“123456”
實施步驟:
[root@localhost ~]# vim /root/users.txt //新建一個取值列表 xiaozhang xiaoli xiaowang xiaosun [root@localhost ~]# vim useraddfor.sh //創(chuàng)建批量創(chuàng)建用戶的腳本 #!/bin/bash ULIST=$(cat /root/users.txt) for UNAME in $ULIST do useradd $UNAME echo "123456" | passwd --stdin $UNAME &> /dev/null done [root@localhost ~]# sh useraddfor.sh //執(zhí)行腳本 [root@localhost ~]# tail -4 /etc/passwd //驗證效果 xiaozhang:x:1001:1001::/home/xiaozhang:/bin/bash xiaoli:x:1002:1002::/home/xiaoli:/bin/bash xiaowang:x:1003:1003::/home/xiaowang:/bin/bash xiaosun:x:1004:1004::/home/xiaosun:/bin/bash
注意:if語句、for語句及其他各種shell腳本語句都是可以嵌套使用的。
for循環(huán)語句非常適用于列表對象無規(guī)律,且列表來源已固定的場合,而對于要求控制循環(huán)次數(shù),操作對象按數(shù)字順序編號、按特定條件執(zhí)行重復(fù)操作等情況,則更適合使用——while循環(huán)語句。
使用while循環(huán)語句是,可以根據(jù)特定的條件反復(fù)執(zhí)行一個命令序列,知道該條件不再滿足為止。在腳本應(yīng)用中,應(yīng)該盡量避免出現(xiàn)死循環(huán)的情況,否則后邊的命令操作將無法執(zhí)行。因此,循環(huán)體內(nèi)的命令序列中應(yīng)包括修改測試條件的語句,以便在適當?shù)臅r候使測試條件不再成立,從而結(jié)束循環(huán)。
1)while循環(huán)語句的語法結(jié)構(gòu)
while 條件測試操作
do
命令序列
done
2)while循環(huán)語句流程圖
使用while循環(huán)語句時,有兩個特殊的條件測試操作。即true(真)和false(假)。使用true作為條件時,表示條件永遠成立,循環(huán)體內(nèi)的命令序列將無限執(zhí)行下去,除非強制終止腳本(或使用exit語句退出腳本);反之若使用false作為條件,則循環(huán)體將不會執(zhí)行。
3)while循環(huán)語句的使用場景
1.循環(huán)次數(shù)已知;
2.必須有一個可以控制循環(huán)變量的語句。
要求:
批量創(chuàng)建有規(guī)律編號的用戶
實施步驟:
[root@localhost ~]# vim useraddwhile.sh #!/bin/bash PREFIX="stu" i=1 while [ $i -le 10 ] do useradd ${PREFIX}$i echo "123456" | passwd --stdin ${PREFIX}$i &> /dev/null let i++ done [root@localhost ~]# sh useraddwhile.sh [root@localhost ~]# tail /etc/passwd stu1:x:1005:1005::/home/stu1:/bin/bash stu2:x:1006:1006::/home/stu2:/bin/bash stu3:x:1007:1007::/home/stu3:/bin/bash stu4:x:1008:1008::/home/stu4:/bin/bash stu5:x:1009:1009::/home/stu5:/bin/bash stu6:x:1010:1010::/home/stu6:/bin/bash stu7:x:1011:1011::/home/stu7:/bin/bash stu8:x:1012:1012::/home/stu8:/bin/bash stu9:x:1013:1013::/home/stu9:/bin/bash stu10:x:1014:1014::/home/stu10:/bin/bash
循環(huán)體內(nèi)部,通過語句“l(fā)et i++”(等同于i=expr $i + 1)來是變量i的值增加1,一直循環(huán),直到滿足條件為止。
1)case語句的語法結(jié)構(gòu)
case 變量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
……
* )
默認命令序列
esac
2)case語句流程圖
使用case分支語句是,幾個值得注意的特點:
Shell腳本應(yīng)用(三)
3)case語句的使用場景
某個變量存在多種取值,需要對其中的每一種取值分別執(zhí)行不同的命令序列,這種情況與多分支的if語句非常相似,只不過if語句需要判斷多個不同的條件,而case語句只是判斷一個變量的不同取值。
[root@localhost ~]# vim hitkey.sh #!/bin/bash read -p "請輸入一個字符,并按Enter鍵確認:" KEY case "$KEY" in [a-z]|[A-Z]) echo "你輸入的是字母 $KEY" ;; [0-9]) echo "你輸入的是數(shù)字 $KEY" ;; *) echo "你輸入的是非法字符 $KEY" esac [root@localhost ~]# sh hitkey.sh 請輸入一個字符,并按Enter鍵確認:1 你輸入的是數(shù)字 1 [root@localhost ~]# sh hitkey.sh 請輸入一個字符,并按Enter鍵確認:w 你輸入的是字母 w [root@localhost ~]# sh hitkey.sh 請輸入一個字符,并按Enter鍵確認:@ 你輸入的是非法字符 @
原文地址: https://www.linuxprobe.com/shell-for-while.html
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。
億速云公眾號
手機網(wǎng)站二維碼
Copyright ? Yisu Cloud Ltd. All Rights Reserved. 2018 版權(quán)所有
廣州億速云計算有限公司粵ICP備17096448號-1 粵公網(wǎng)安備 44010402001142號增值電信業(yè)務(wù)經(jīng)營許可證編號:B1-20181529