Shell腳本應用 – for、while循環語句

經過Shell腳本應用(二)學習到了if條件條件語句的使用方法等。Shell做爲一種腳本編程語言,一樣了包含了循環,分支等其餘程序控制結構,從而可以輕鬆完成更加複雜、強大的功能。咱們今天就來認識for、while、case語句的具體應用。

1、for循環語句html

在實際工做中,常常會遇到某項任務須要屢次執行的狀況,而每次執行時僅僅是處理的對象不同,其餘命令相同。例如:根據通信錄中的姓名列表建立系統帳號等狀況。linux

當面對各類列表重複工做任務時,使用if語句已經不能知足須要了,就須要使用到for語句。shell

1.for語句結構編程

使用for循環語句時,須要指定一個變量及可能的取值列表,針對不一樣的取值重複執行相同的命令序列,知道變量值用完退出循環。vim

1)for循環語句的語法結構:bash

for 變量名 in 取值列表
do
命令序列
done編程語言

語句結構中,for語句的操做對象爲用戶吧指定名稱的變量,並經過in關鍵字爲該變量預先設置了一個取值列表,多個取值之間用空格進行分隔。位於do……done之間的命令序列稱爲循環體,其中的執行語句須要應用變量以完成相應的任務。學習

2)for循環語句流程圖測試

Shell腳本應用 – for、while循環語句Shell腳本應用 – for、while循環語句

3)for循環語句的使用場景htm

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
do
useradd $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腳本語句都是能夠嵌套使用的。

2、while循環語句

for循環語句很是適用於列表對象無規律,且列表來源已固定的場合,而對於要求控制循環次數,操做對象按數字順序編號、按特定條件執行重複操做等狀況,則更適合使用——while循環語句。

1.while語句的結構

使用while循環語句是,能夠根據特定的條件反覆執行一個命令序列,知道該條件再也不知足爲止。在腳本應用中,應該儘可能避免出現死循環的狀況,不然後邊的命令操做將沒法執行。所以,循環體內的命令序列中應包括修改測試條件的語句,以便在適當的時候使測試條件再也不成立,從而結束循環。

1)while循環語句的語法結構

while 條件測試操做
do
命令序列
done

2)while循環語句流程圖
Shell腳本應用 – for、while循環語句Shell腳本應用 – for、while循環語句
使用while循環語句時,有兩個特殊的條件測試操做。即true(真)和false(假)。使用true做爲條件時,表示條件永遠成立,循環體內的命令序列將無限執行下去,除非強制終止腳本(或使用exit語句退出腳本);反之若使用false做爲條件,則循環體將不會執行。

3)while循環語句的使用場景

1.循環次數已知;
2.必須有一個能夠控制循環變量的語句。

2.while語句應用示例

要求:
批量建立有規律編號的用戶
實施步驟:

[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

循環體內部,經過語句「let i++」(等同於i=expr $i + 1)來是變量i的值增長1,一直循環,直到知足條件爲止。

3、case分支語句

1.case語句的結構

1)case語句的語法結構

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

2)case語句流程圖
Shell腳本應用 – for、while循環語句Shell腳本應用 – for、while循環語句
使用case分支語句是,幾個值得注意的特色:
Shell腳本應用(三)

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鍵確認:@
你輸入的是非法字符 @

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

相關文章
相關標籤/搜索