如何:使用示例循环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