shell中的for循环

我的梦境 提交于 2020-02-14 17:49:18

shell中的for循环

1.C语言风格的for循环

格式:

for ((exp1;exp2;exp3))
do
	statements
done

运行过程:

  • 先执行exp1;
  • 再执行exp2,如果它的判断结果成立,则执行循化体中的语句,否则结束整个for循环;
  • 执行完循环体后再执行exp3;
  • 重复执行步骤2和3,直到exp2的判断结果不成立,就结束循环;
  • 上面的步骤中,第二步和第三步合并在一起算一次循环,会重复执行。for语句的主要作用就是不断执行步骤2和3-

注意:
1.exp1仅在第一次循环时执行,以后都不会再执行。可以认为这是一个初始化语句
2.exp2一般是一个关系表达式,决定了是否有还要继续下次循环,称为“循化条件”
3.exp3很多情况下是一个带有自增或自减运算的表达式,以使循环条件逐渐变得“不成立”
4.for循环中的exp1、exp2、exp3都是可选项,都可以省略,但分号必须保留!

for ((初始化语句;判断条件;自增或自减))

2.C语言风格for循环的例子

例1:计算1到100的和

#!/bin/bash

sum=0
for ((i=1;i<=100;i++))
do
	((sum += i))
done
echo "The sum is $sum"

例2:省略初始化条件

#!/bin/bash
i=1				#把初始化条件提前写在for语句前面	
sum=0
for ((;i<=100;i++))	#即使省略了exp1,它后面的分号仍然需要保留
do
	((sum += i))
done
echo "The sum is $sum"

例3:省略判断条件

#!/bin/bash

sum=0
for ((i=1;;i++))		#分号不能省略
do
	if ((i>100));then	#把判断条件写成if语句在for循环体中
		break
	fi
	((sum += i))
done
echo "The sum is $sum"

例4:省略自增或自减

#!/bin/bash

sum=0
for ((i=1;i<=100;))
do
	((sum += i))
	((i++))		#把自增或自减写进循环体中
done
echo "The sum is $sum"

例5:全部省略

#!/bin/bash
i=1
sum=0
for ((;;))
do
	if ((i>100));then
		break
	fi
	((sum += i))
	((i++))
done
echo "The sum is $sum"

以上每段代码都是正确的,运行结果:
在这里插入图片描述

3.python风格的for in循环

格式:

for variable in value_list
do
	statements
done

其中variable表示变量,value_list表示取值列表

循环过程:
每次循环都会从value_list中取出一个值赋给变量variable,然后进入循环体,执行循环中的statements,直到取完value_list中的所有值,循环结束

4.python风格for循环的例子

例1:value_list:直接给出具体的值

#!/bin/bash

sum=0
for n in 1 2 3 4 5
do
	echo $n
	((sum+=n))
done

echo "The sum is $sum"

在这里插入图片描述
例2:value_list:直接给出具体的值

#!/bin/bash
#value_list:直接给出具体的值

for str in "nigar" "hello,nigar" "www.nigar.com"
do
	echo $str
done

在这里插入图片描述
例3:value_list:给出一个取值范围
value_list:给出一个取值范围 {start…end}
start:起始值 end:终止值
注意:中间用两个点相连
注意:这种形式只支持数字和字母

#!/bin/bash
#value_list:给出一个取值范围 {start..end}
# start:起始值 end:终止值
# 注意:中间用两个点相连
# 注意:这种形式只支持数字和字母

sum=0
for i in {1..100}
do
	((sum+=i))
done

echo "The sum is $sum"

在这里插入图片描述
例4:value_list:给出一个取值范围

#!/bin/bash
for c in {A..z}
do
	printf "%c" $c
done

在这里插入图片描述
例5:value_list:根据命令的执行结果

获取命令执行结果:反引号`` 或者$( )

#!/bin/bash
# 根据命令的执行结果
# 获取命令执行结果:反引号`` 或者$()

# 计算1到100之间所有奇数的和

sum=0
for i in $(seq 1 2 100)	#seq是一个linux命令 用来产生某个范围内的整数 并且可以设置步长
do
	((sum+=i))
done
echo $sum

例6:value_list:命令的结果

#!/bin/bash
#value_list:命令的结果
for filename in $(ls *.sh)
do
	echo $filename
done

例7:value_list:可以使用通配符

#!/bin/bash
# 可以使用通配符

for filename in *.sh
do
	echo $filename
done

在这里插入图片描述
例8:value_list:可以使用特殊符号

$@表示参数列表中所有参数

#!/bin/bash
# 可以使用特殊符号
# $@ 表示参数列表中所有参数

function func() {
	for str in $@
	do 
		echo $str
	done
}

func shell python java c++

在这里插入图片描述
例9:value_list可以省略

#!/bin/bash
# 可以使用特殊符号
# $@ 表示参数列表中所有参数

function func() {
	for str	#这里的value_list可以省略
	do 
		echo $str
	done
}

func shell python java c++
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!