Shell指令碼應用(三) 筱振的部落格

2022-09-23 05:42:09 字數 3866 閱讀 8565

通過shell指令碼應用(二)學習到了if條件條件語句的使用方法等。shell作為一種指令碼程式語言,同樣了包含了迴圈,分支等其他程式控制結構,從而能夠輕鬆完成更加複雜、強大的功能。我們今天就來認識for、while、case語句的具體應用。

一、for迴圈語句

在實際工作中,經常會遇到某項任務需要多次執行的情況,而每次執行時僅僅是處理的物件不一樣,其他命令相同。例如:根據通訊錄中的姓名列表建立系統賬號等情況。

當面對各種列表重複工作任務時,使用if語句已經不能滿足需要了,就需要使用到for語句。

1.for語句結構

使用for迴圈語句時,需要指定乙個變數及可能的取值列表,針對不同的取值重複執行相同的命令序列,知道變數值用完退出迴圈。

1)for迴圈語句的語法結構:

for 變數名 in 取值列表

do  命令序列

done

語句結構中,for語句的操作物件為使用者吧指定名稱的變數,並通過in關鍵字為該變數預先設定了乙個取值列表,多個取值之間用空格進行分隔。位於do……done之間的命令序列稱為迴圈體,其中的執行語句需要應用變數以完成相應的任務。

2)for迴圈語句流程圖

3)for迴圈語句的使用場景

1. 迴圈次數未知;

2.完整遍歷整個取值列表。

2.for語句應用示例要求:

1.根據姓名列表批量建立使用者;

2.使用者的初始密碼是「123456」

實施步驟:

[root@localhost ~]# vim /root/users.txt //新建乙個取值列表

xiaozhang

xiaoli

xiaowang

xiaosun

[root@localhost ~]# vim useraddfor.sh //建立批量建立使用者的指令碼

#!/bin/bash

ulist=$(cat /root/users.txt)

for uname in $ulist

douseradd $uname

echo "123456" | passwd --stdin $uname &> /dev/null

done

[root@localhost ~]# sh useraddfor.sh //執行指令碼

[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指令碼語句都是可以巢狀使用的。

二、while迴圈語句

for迴圈語句非常適用於列表物件無規律,且列表**已固定的場合,而對於要求控制迴圈次數,操作物件按數字順序編號、按特定條件執行重複操作等情況,則更適合使用——while迴圈語句。

1.while語句的結構

使用while迴圈語句是,可以根據特定的條件反覆執行乙個命令序列,知道該條件不再滿足為止。在指令碼應用中,應該盡量避免出現死迴圈的情況,否則後邊的命令操作將無法執行。因此,迴圈體內的命令序列中應包括修改測試條件的語句,以便在適當的時候使測試條件不再成立,從而結束迴圈。

1)while迴圈語句的語法結構

while 條件測試操作

do命令序列

done

2)while迴圈語句流程圖

使用while迴圈語句時,有兩個特殊的條件測試操作。即true(真)和false(假)。使用true作為條件時,表示條件永遠成立,迴圈體內的命令序列將無限執行下去,除非強制終止指令碼(或使用exit語句退出指令碼);反之若使用false作為條件,則迴圈體將不會執行。

3)while迴圈語句的使用場景

1.迴圈次數已知;

2.必須有乙個可以控制迴圈變數的語句。

2.while語句應用示例要求:

批量建立有規律編號的使用者

實施步驟:

[root@localhost ~]# vim useraddwhile.sh

#!/bin/bash

prefix="stu"

i=1while

[ $i -le 10 ]

douseradd $$i

echo "123456" | passwd --stdin $$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

迴圈體內部,通過語句「let i++」(等同於i=expr $i + 1)來是變數i的值增加1,一直迴圈,直到滿足條件為止。

三、case分支語句

1.case語句的結構

1)case語句的語法結構

case 變數值 in

模式1)

命令序列1

;;模式2)

命令序列2

;; ……

* )預設命令序列

esac

2)case語句流程圖

使用case分支語句是,幾個值得注意的特點:

3)case語句的使用場景

某個變數存在多種取值,需要對其中的每一種取值分別執行不同的命令序列,這種情況與多分支的if語句非常相似,只不過if語句需要判斷多個不同的條件,而case語句只是判斷乙個變數的不同取值。

2.case語句應用例項

[root@localhost ~]# vim hitkey.sh

#!/bin/bash

read -p "請輸入乙個字元,並按enter鍵確認:" key

case "$key" in

[a-z]|[a-z])

echo "你輸入的是字母 $key"

;;[0-9])

echo "你輸入的是數字 $key"

;;*)

echo "你輸入的是非法字元 $key"

esac

[root@localhost ~]# sh hitkey.sh

請輸入乙個字元,並按enter鍵確認:1

你輸入的是數字 1

[root@localhost ~]# sh hitkey.sh

請輸入乙個字元,並按enter鍵確認:w

你輸入的是字母 w

[root@localhost ~]# sh hitkey.sh

請輸入乙個字元,並按enter鍵確認:@

你輸入的是非法字元 @

Shell指令碼應用(三)

一 使用for語句應用示列 1 1 根據姓名列表批量新增使用者 批量新增使用者的指令碼 root centos01 vim uaddfor.sh bin bash ulist cat root users.txt for uname in ulist douseradd uname echo 123...

Shell指令碼應用

shell script shell指令碼與windows dos下的批處理相似,也就是用各類命令預先放入到乙個檔案中,方便一次性執行的乙個程式檔案,主要是方便管理員進行設定或者管理用的。但是它比windows下的批處理更強大,比用其他程式設計程式編輯的程式效率更高,它使用了linux unix下的...

三層交換技術 筱振的部落格

三層交換中的三層指的是osi七層模型中的第三層 網路層 網路層的核心裝置就是路由器,傳統的二層交換機位於第二層 資料鏈路層 把交換機和路由器連線在一起,就以為著交換機可以工作在第三層,執行路由協議。為什麼會有三層交換技術的出現?因為單臂路由有很多無法彌補的缺陷 1.單臂 本身就是網路的骨幹鏈路,容易...