如何:使用示例循環Bash

Bash中的循環是Bash Shell編程中非常重要的循環結構。 基本上,Bash中的循環用於迭代行中的一系列單詞。 這篇文章描述了Bash中的循環以及所有必要的示例。

Bash中循環的基本語法是:

for { variable name } in { list }
 
do
 
Command1
 
Command2
 
.
 
.
 
CommmandN
 
done

Bash中的循環示例:

1:簡單循環:

在下面的Bash循環示例中,我們初始化了變量i。 通過將值1遞增從1到5的一系列循環中的此變量i。我在回顯i值的命令中處理相同的變量值。

	
[[email protected] ~]# cat for_loop_test.sh
for i in 1 2 3 4 5
do
echo "Добро пожаловать на AndreyEx $i раз"
done
[[email protected] ~]# chmod u+x for_loop_test.sh
[[email protected] ~]# ./for_loop_test.sh
Добро пожаловать на AndreyEx 1 раз
Добро пожаловать на AndreyEx 2 раз
Добро пожаловать на AndreyEx 3 раз
Добро пожаловать на AndreyEx 4 раз
Добро пожаловать на AndreyEx 5 раз
[[email protected] ~]#

2.版本4.0的Bash中的附加循環:

在上面的示例1中,我們通過定義和寫入i的所有值來開始循環。 但是如果您的循環具有多個值並且您要在同一值上進行迭代該怎麼辦。 Bash 4.o及更高版本支持功能,您可以在其中定義系列的開始和結束值以及增量值。 讓它以3為增量從1迭代到12,您可以使用下面的Bash循環示例進行定義。

	
[[email protected] ~]# for i in {0..12..3}
> do
> echo "Добро пожаловать AndreyEx $i раз"
> done
Добро пожаловать AndreyEx 0 раз
Добро пожаловать AndreyEx 3 раз
Добро пожаловать AndreyEx 6 раз
Добро пожаловать AndreyEx 9 раз
Добро пожаловать AndreyEx 12 раз
[[email protected] ~]#

3.讀取目錄:

另外,您可以使用以下示例使用目錄中的文件列表來初始化變量循環。

[[email protected] var]# for i in $( ls )
do
echo File: $i;
done

Bash中循環輸出的示例如下所示:

	
File: account
File: cache
File: crash
File: cvs
File: data
File: db
File: ftp
File: ftp_account
File: game
File: lib
File: locale
File: locks
File: log
File: mailru
File: nis
File: opt
File: preserve
File: runs
File: spools
File: temp
File: yp
[[email protected] var]#

4. C編程的語法:

您還可以使用C編程語言將Bash中的循環用作語句,如下所示:

for ((i=1;i<=20;i=i+1))
do
echo $i
done

5.文件處理的內容。

您還可以在Bash中使用循環來在另一個命令中處理文件的內容。 在處理大量數據時,它很有幫助。 如果您有一個包含用戶列表的文件,並且想要檢查用戶是否被阻止。 然後使用下面的示例。

帶有用戶列表的文件示例。

[[email protected] ~]# cat /tmp/users
boris
andreyex
marina
test_ftp_user
testuser
uxuser

在下面的示例中,變量“ i”是使用cat命令初始化的,並傳遞給“ passwd -s”命令,該命令的參數為$ i(無非是用戶名),以檢查他是否被鎖定。

[[email protected] ~]# for i in `cat /tmp/users`
> do
> passwd -S $i
> done
boris LK 2017-01-13 0 99999 7 -1 (Password locked.)
andreyex LK 2017-01-01 0 99999 7 -1 (Password locked.)
marina LK 2017-01-01 0 99999 7 -1 (Password locked.)
test_ftp_user PS 2017-01-07 0 99999 7 -1 (Password set, SHA512 crypt.)
testuser PS 2017-01-01 0 99999 7 -1 (Password set, SHA512 crypt.)
uxuser LK 2017-01-08 0 99999 7 -1 (Password locked.)
[[email protected] ~]#

6.將文件複製到多個主機

您還可以在Bash中使用循環,可以在其中將文件複製到多個主機,並且不想一個接一個地鍵入相同的命令。 在下面的示例中,您將test.txt文件複製到主機:“ ANDREYEX01 grayex02 manns1 grayex06”,還可以使用Bash中的循環使複製文件變得輕而易舉。

for HOST in ANDREYEX01 andreyex02 manns1 andreyex06 
do
scp test.txt $HOST:/tmp/
done

7. LVM鏡像:

您可以在Bash中使用循環來鏡像LV布爾擴展。 假設您有一個具有10 LV的vg00卷組,並且要使用PV sde1對其進行鏡像。 然後,您可以使用循環在一個簡單,緊湊的解決方案中一次性運行它。

for i in 1 2 3 4 5 6 7 8 9 10
do
lvextend -m 1 /dev/vg00/lvol$i /dev/sde1
done

8.乘法表:

假設您要使用Bash Shell編寫一個乘法表程序,在下面的循環示例中,我們初始化變量i,該變量將用於使用expr命令對數字進行乘法。

if [ $# -eq 0 ]
then
echo "Пожалуйста введите число неравное 0"
echo "Синтаксис : $0 числа"
exit 1
fi
n=$1
for i in 1 2 3 4 5 6 7 8 9 10
do
echo "$n * $i = `expr $i * $n`"
done

輸出示例:

[[email protected] ~]# ./myfile.sh 7
7 * 1 = 7
7 * 2 = 14
7 * 3 = 21
7 * 4 = 28
7 * 5 = 35
7 * 6 = 42
7 * 7 = 49
7 * 8 = 56
7 * 9 = 63
7 * 10 = 70

Sidebar