作法:范例的Bash循环

Bash循环是Bash shell编程中非常重要的循环构造。 基本上,Bash中的循环用于迭代行中的一系列单词。 本文介绍了Bash中的循环以及所有必要的示例。

基本的“ Bash for Loop”语法:

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

Bash Loop的示例:

1:简单循环:

在下面的循环示例中,我们已经初始化了一个变量。 通过将值递增1将变量从1循环到5。在命令中处理相同的变量值,并将其回显到变量值。

[[email protected] ~]# cat for_loop_test.sh
for i in 1 2 3 4 5
do
echo "Welcome to AndreyEx $i times"
done
[[email protected] ~]# chmod u+x for_loop_test.sh
[[email protected] ~]# ./for_loop_test.sh
Welcome to AndreyEx 1 times
Welcome to AndreyEx 2 times
Welcome to AndreyEx 3 times
Welcome to AndreyEx 4 times
Welcome to AndreyEx 5 times
[[email protected] ~]#

2.版本4.0的其他Bash循环:

在上面的示例1中,我们通过写入变量的所有值来启动循环,但是如果您的循环具有多个值并且您想要在同一变量上进行迭代该怎么办。 在Bash 4.o及更高版本中,支持功能,您可以在其中定义系列的开始和结束值以及增量值。 让您从1到20逐步迭代(最多4个值),您可以使用以下示例进行循环定义。

[[email protected] ~]# for i in {0..20..4}
> do
> echo "Welcome to AndreyEx $i times"
> done
Welcome to AndreyEx 0 times
Welcome to AndreyEx 4 times
Welcome to AndreyEx 8 times
Welcome to AndreyEx 12 times
Welcome to AndreyEx 16 times
Welcome to AndreyEx 20 times
[[email protected] ~]#

3.读取目录:

另外,您可以使用以下示例使用目录中的文件列表来初始化Bash循环变量。

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

循环的示例Bash输出如下所示:

	
File: account
File: cache
File: crash
File: cvs
File: db
File: empty
File: ftp
File: ftp_dump
File: games
File: lib
File: local
File: lock
File: log
File: mail
File: nis
File: opt
File: preserve
File: run
File: spool
File: tmp
File: yp
[[email protected] var]#

4.用C语法编程:

您还可以使用C编程将Bash用于循环,如下所示:

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

5.处理文件的内容。

您还可以在Bash中使用循环来在另一个命令中处理文件的内容。 在处理大量数据时,它很有帮助。 假设您有一个包含用户列表的文件,并且想要检查用户是否被锁定。 例如,在Bash下面使用。

带有用户列表的文件示例。

[[email protected] ~]# cat /tmp/users
mann
foo
bar
test_ftp_user
testuser
uxuser

在下面的示例中,该变量使用cat命令初始化,并传递给“ passwd -s”命令,该命令具有$之类的参数,仅用于用户名,以检查是否被阻止。

[[email protected] ~]# for i in `cat /tmp/users`
> do
> passwd -S $i
> done
mann LK 2017-01-13 0 99999 7 -1 (Password locked.)
foo LK 2017-01-01 0 99999 7 -1 (Password locked.)
bar 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复制到主机“ RHEL01 rhel02 mann1 rhel06”上的文件中,然后可以进行用户循环,从而可以一次性复制该文件。

for HOST in RHEL01 rhel02 mann1 rhel06 
do
scp test.txt $HOST:/tmp/
done

7.镜像LVM:

您可以在镜像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程序。 在Bash下面使用以进行循环。 在下面针对路径的Bash示例中,我们初始化了一个变量,该变量将用于使用expr命令将数字相乘。

if [ $# -eq 0 ]
then
echo "Please do not enter Zero"
echo "Syntax : $0 number"
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

输出示例:

Sidebar