Shell--for循环

除了while循环和until循环,Shell脚本还提供了for循环,它更加灵活易用,更加简洁明了。Shell for循环有两种形式:C语言风格和Python语言风格

一、C语言风格for循环

C语言风格for循环的用法如下:

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

这个循环语句的执行顺序是

  1. 先执行exp1
  2. 在执行exp2,若果它的判断结果是成立的,则执行循环体中的语句,否则结束整个for循环
  3. 执行完循环体再执行exp3
  4. 重复2.3,直到exp2的判断结果不成立,就结束循环

其中需要注意的是:

  • exp1exp2exp3是三个表达式,其中exp2是判断条件,for循环根据exp2的结果来决定是否继续下一次循环;
  • statements是循环体语句,可以有一条,也可以有多条;
  • dodone是Shell的关键字
  • exp1仅在第一次循环时执行,以后不会再执行,可以认为这是一个初始化语句
  • exp2一般是一个关系表达式,决定了是够还要继续下次循环,成为“循环条件”。
  • exp3很多情况下是一个带有自增或者自减运算的表达式,以使循环条件逐渐变得“不成立”。
  • for循环中exp1(初始化语句)、exp2(判断条件)和exp3(自增或自减)都是可选项,都可以省略(但分号;必须保留)

1.实例1

#!/bin/bash
sum=0
for ((i=1;i<=100;i++))
do
    ((sum += i))
done
echo "the sum is: $sum"

运行结果为:

the sum is: 5050

2.实例2:省略exp1

#!/bin/bash
sum=0
i=1
for ((;i<=100;i++))
do
    ((sum += i))
done
echo "the sum is: $sum"

运行结果为:

the sum is: 5050

3.实例3:省略exp2

若要省略exp2后还要保证脚本功能不变,可以进行如下调整:

#!/bin/bash
sum=0

for ((i=1; ;i++))
do
    if ((i > 100 )); then
        break
    fi
    ((sum += i))
done
echo "the sum is: $sum"

运行结果为:

the sum is: 5050

4.实例4:省略exp3

若要省略exp3后还要保证脚本功能不变,可以进行如下调整:

#!/bin/bash
sum=0

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

运行结果为:

the sum is: 5050

5.实例3:三个条件均省略

若要省略三个条件后还要保证脚本功能不变,可以进行如下调整:

#!/bin/bash
sum=0

for ((; ;))
do
    if ((i > 100 )); then
        break
    fi
    ((sum += i))
    ((i++))
done
echo "the sum is: $sum"

运行结果为:

the sum is: 5050

二、Python语言风格for in循环

Python语言风格for in循环用法如下:

for var in value_list
do
    statements
done

其中:var表示变量,value_list表示取值列表,in是Shell中的关键字

1.实例1

#!/bin/bash
sum=0

for n in 1 2 3 4 5
do
   echo $n
   ((sum+=n))
done
echo "the sum is: $sum"

运行结果为:

1
2
3
4
5
the sum is: 15

2.实例2

#!/bin/bash
for str in "a" "b" "c"
do
   echo $str
   
done

运行结果为:

a
b
c

3.实例3:in后跟取值范围

in后也可以给出一个取之范围{start..end}

其中:
start:起始值
end:终止值

注意:中间用两个点相连,这种形式只支持数字和字母

#!/bin/bash
sum=0

for n in {1..100}
do
   ((sum+=n))
   
done
echo sum is: $sum

for c in {A..z}
do
   printf "%c" $c
   
done

输出结果为:

sum is: 5050
ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz

4.实例4:in后跟命令

in后还可以跟命令,根据命令的执行结果来选择范围:

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

运行结果为:

sum is: 2550

5.实例5:in后跟通配符

in后还可以跟通配符,根据通配符的执行结果来选择范围:

#!/bin/bash
for i in *.sh        
do
   echo $filename   
done

运行结果为:

01.sh
02.sh
03.sh
04.sh
05.sh
06.sh

6.实例6:in后跟特殊符号

in后还可以跟特殊符号,根据特殊符号的执行结果来选择范围:

#!/bin/bash
#$@表示列表中的所有参数
function func(){
        for str in $@     
        do
               echo $str
        done
}

func C++ Java Python Shell

运行结果为:

C++
Java
Python
Shell

发布了101 篇原创文章 · 获赞 65 · 访问量 3162

猜你喜欢

转载自blog.csdn.net/qq_35887546/article/details/104291727