1. while循环

while循环是shell脚本中最简单的一种循环,当条件满足时,while重复的执行一组语句,当条件不满足时,就退出while循环

Shell while循环的用法如下:

while condition
do
	statements
done

condition表示判断条件,statements表示要执行的语句(可以是一条,也可以有多条),do 和 done都是shell中的关键字

注意:在while循环体中必须有相应的语句使得condition越来越趋近于“不成立”,只有这样才能最终退出循环,否则while就成了死循环,会一直执行下去,永无休止

while语句和if else语句中的condition用法都是一样的,可以使用test命令或[],也可以使用(())或者[[]]

以下是一个基本的while循环,
测试条件是:如果i小于等于100,那么条件返回真。i 从1开始,每次循环处理时,i 加1。运行上述脚本:
eg:

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

运行脚本,输出:

The sum is: 5050

2. while循环读取键盘输入

while循环可用于读取键盘信息。下面的例子中,输入信息被设置为变量FILM,按结束循环。

#!/bin/bash
echo '按下 <CTRL-D> 退出'
echo -n '输入你最喜欢的网站名: '
while read FILM
do
    echo "是的!$FILM 是一个好网站"
done

运行脚本,输出为:

按下 <CTRL-D> 退出
输入你最喜欢的网站名:百度
是的!百度 是一个好网站

即在终端中读取数据,可以等于在文件中读取数据,按下ctrl+d组合键表示读取到文件流的末尾,此时read就会读取失败。得到一个 非0的退出状态,从而导致判断条件不成立,结束循环

3.Shell无限循环

三种无限循环语法格式:

while :
do
    command
done
while true
do
    command
done
for (( ; ; ))

4. for 循环

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

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

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

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

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

其中需要注意的是:

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

for循环中exp1(初始化语句)、exp2(判断条件)和exp3(自增或自减)都是可选项,都可以省略(但分号;必须保留)

eg:实例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.实例5:三个条件均省略

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

#!/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中的关键字
实例一:

#!/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

#!/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:in后跟命令

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

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

运行结果为:

sum is: 2550

实例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:in后跟特殊符号

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

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

func C++ Java Python Shell

运行结果为:

C++
Java
Python
Shell
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐