Shell腳本應(yīng)用–for、while循環(huán)語(yǔ)句

通過(guò) Shell 腳本應(yīng)用(二)學(xué)習(xí)到了if條件條件語(yǔ)句的使用方法等。 Shell作為一種 腳本編程語(yǔ)言,同樣了包含了循環(huán),分支等其他程序控制結(jié)構(gòu),從而能夠輕松完成更加復(fù)雜、強(qiáng)大的功能。我們今天就來(lái)認(rèn)識(shí)for、while、case語(yǔ)句的具體應(yīng)用。
一、for循環(huán)語(yǔ)句

在實(shí)際工作中,經(jīng)常會(huì)遇到某項(xiàng)任務(wù)需要多次執(zhí)行的情況,而每次執(zhí)行時(shí)僅僅是處理的對(duì)象不一樣,其他 命令相同。例如:根據(jù)通訊錄中的姓名列表創(chuàng)建系統(tǒng)賬號(hào)等情況。

員工經(jīng)過(guò)長(zhǎng)期磨合與沉淀,具備了協(xié)作精神,得以通過(guò)團(tuán)隊(duì)的力量開發(fā)出優(yōu)質(zhì)的產(chǎn)品。創(chuàng)新互聯(lián)公司堅(jiān)持“專注、創(chuàng)新、易用”的產(chǎn)品理念,因?yàn)椤皩W⑺詫I(yè)、創(chuàng)新互聯(lián)網(wǎng)站所以易用所以簡(jiǎn)單”。公司專注于為企業(yè)提供成都網(wǎng)站建設(shè)、網(wǎng)站制作、微信公眾號(hào)開發(fā)、電商網(wǎng)站開發(fā),小程序開發(fā),軟件按需策劃等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。

當(dāng)面對(duì)各種列表重復(fù)工作任務(wù)時(shí),使用if語(yǔ)句已經(jīng)不能滿足需要了,就需要使用到for語(yǔ)句。

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

使用for循環(huán)語(yǔ)句時(shí),需要指定一個(gè)變量及可能的取值列表,針對(duì)不同的取值重復(fù)執(zhí)行相同的 命令序列,知道變量值用完退出循環(huán)。

1)for循環(huán)語(yǔ)句的語(yǔ)法結(jié)構(gòu):

for 變量名 in 取值列表
do
命令序列
done

語(yǔ)句結(jié)構(gòu)中,for語(yǔ)句的操作對(duì)象為用戶吧指定名稱的變量,并通過(guò)in關(guān)鍵字為該變量預(yù)先設(shè)置了一個(gè)取值列表,多個(gè)取值之間用空格進(jìn)行分隔。位于do……done之間的命令序列稱為循環(huán)體,其中的執(zhí)行語(yǔ)句需要應(yīng)用變量以完成相應(yīng)的任務(wù)。

2)for循環(huán)語(yǔ)句流程圖

Shell腳本應(yīng)用 – for、while循環(huán)語(yǔ)句

3)for循環(huán)語(yǔ)句的使用場(chǎng)景

1. 循環(huán)次數(shù)未知;
2.完整遍歷整個(gè)取值列表。

2.for語(yǔ)句應(yīng)用示例

要求:
1.根據(jù)姓名列表批量創(chuàng)建用戶;
2.用戶的初始密碼是“123456”
實(shí)施步驟:

[root@localhost ~]# vim /root/users.txt //新建一個(gè)取值列表
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 //驗(yàn)證效果
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語(yǔ)句、for語(yǔ)句及其他各種shell腳本語(yǔ)句都是可以嵌套使用的。

二、while循環(huán)語(yǔ)句

for循環(huán)語(yǔ)句非常適用于列表對(duì)象無(wú)規(guī)律,且列表來(lái)源已固定的場(chǎng)合,而對(duì)于要求控制循環(huán)次數(shù),操作對(duì)象按數(shù)字順序編號(hào)、按特定條件執(zhí)行重復(fù)操作等情況,則更適合使用——while循環(huán)語(yǔ)句。

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

使用while循環(huán)語(yǔ)句是,可以根據(jù)特定的條件反復(fù)執(zhí)行一個(gè)命令序列,知道該條件不再滿足為止。在腳本應(yīng)用中,應(yīng)該盡量避免出現(xiàn)死循環(huán)的情況,否則后邊的命令操作將無(wú)法執(zhí)行。因此,循環(huán)體內(nèi)的命令序列中應(yīng)包括修改測(cè)試條件的語(yǔ)句,以便在適當(dāng)?shù)臅r(shí)候使測(cè)試條件不再成立,從而結(jié)束循環(huán)。

1)while循環(huán)語(yǔ)句的語(yǔ)法結(jié)構(gòu)

while 條件測(cè)試操作
do
命令序列
done

2)while循環(huán)語(yǔ)句流程圖
Shell腳本應(yīng)用 – for、while循環(huán)語(yǔ)句
使用while循環(huán)語(yǔ)句時(shí),有兩個(gè)特殊的條件測(cè)試操作。即true(真)和false(假)。使用true作為條件時(shí),表示條件永遠(yuǎn)成立,循環(huán)體內(nèi)的命令序列將無(wú)限執(zhí)行下去,除非強(qiáng)制終止腳本(或使用exit語(yǔ)句退出腳本);反之若使用false作為條件,則循環(huán)體將不會(huì)執(zhí)行。

3)while循環(huán)語(yǔ)句的使用場(chǎng)景

1.循環(huán)次數(shù)已知;
2.必須有一個(gè)可以控制循環(huán)變量的語(yǔ)句。

2.while語(yǔ)句應(yīng)用示例

要求:
批量創(chuàng)建有規(guī)律編號(hào)的用戶
實(shí)施步驟:

[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)部,通過(guò)語(yǔ)句“l(fā)et i++”(等同于i=expr $i + 1)來(lái)是變量i的值增加1,一直循環(huán),直到滿足條件為止。

三、case分支語(yǔ)句
1.case語(yǔ)句的結(jié)構(gòu)

1)case語(yǔ)句的語(yǔ)法結(jié)構(gòu)

case 變量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
……
* )
默認(rèn)命令序列
esac

2)case語(yǔ)句流程圖
Shell腳本應(yīng)用 – for、while循環(huán)語(yǔ)句
使用case分支語(yǔ)句是,幾個(gè)值得注意的特點(diǎn):
Shell腳本應(yīng)用(三)

3)case語(yǔ)句的使用場(chǎng)景

某個(gè)變量存在多種取值,需要對(duì)其中的每一種取值分別執(zhí)行不同的命令序列,這種情況與多分支的if語(yǔ)句非常相似,只不過(guò)if語(yǔ)句需要判斷多個(gè)不同的條件,而case語(yǔ)句只是判斷一個(gè)變量的不同取值。

2.case語(yǔ)句應(yīng)用實(shí)例
[root@localhost ~]# vim hitkey.sh
#!/bin/bash
read -p "請(qǐng)輸入一個(gè)字符,并按Enter鍵確認(rèn):" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "你輸入的是字母 $KEY"
;;
[0-9])
echo "你輸入的是數(shù)字 $KEY"
;;
*)
echo "你輸入的是非法字符 $KEY"
esac
[root@localhost ~]# sh hitkey.sh
請(qǐng)輸入一個(gè)字符,并按Enter鍵確認(rèn):1
你輸入的是數(shù)字 1
[root@localhost ~]# sh hitkey.sh
請(qǐng)輸入一個(gè)字符,并按Enter鍵確認(rèn):w
你輸入的是字母 w
[root@localhost ~]# sh hitkey.sh
請(qǐng)輸入一個(gè)字符,并按Enter鍵確認(rèn):@
你輸入的是非法字符 @

原文地址: https://www.linuxprobe.com/shell-for-while.html

分享文章:Shell腳本應(yīng)用–for、while循環(huán)語(yǔ)句
本文網(wǎng)址:http://www.muchs.cn/article22/pgdhcc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、網(wǎng)站營(yíng)銷、小程序開發(fā)、App開發(fā)響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名

網(wǎng)站設(shè)計(jì)公司知識(shí)