Shell系统学习之循环结构

 系列文章目录

Shell系统学习之什么是Shell

Shell系统学习之创建一个Shell程序

Shell系统学习之向Shell脚本传递参数

Shell系统学习之如何执行Shell程序

Shell系统学习之Shell变量和引用

 Shell系统学习之Shell条件测试,判断语句和运算符

 Shell系统学习之循环结构

 Shell系统学习之函数

Shell系统学习之数组

系统学习Shell之正则表达式

Shell系统学习之文件操作

Shell系统学习之子Shell与进程处理


目录

for循环语句

带列表的for循环语句

 不带列表的for语句

类C风格的for循环语句

使用for循环处理数组 

until循环语句

while循环语句

break和continue

 小结


for循环语句

带列表的for循环语句

语法如下:

for variable in {list}
do
    statement1
    ...
done

在上面的语法中,variable称为循环变量,list是一个列表,可以是一系列数字或者字符串,元素之间用空格隔开,do和done之间的结构称为循环体。

下面举几个示例:

#!/bin/bash

for var in 1 2 3 4 5 6
do
 printf "$var"; printf " "
done

echo 

for var in {1..6}
do
 printf "$var"; printf " "
done

echo 

for day in Mon Tue Wed Thu Fri Sat Sun
do
 printf "$day"; printf " "
done

echo 

for day in { Mon Tue Wed Thu Fri Sat Sun }
do
 printf "$day"; printf " "
done

结果如下:

eden_ubuntu@edenubuntu:~/Documents/Shell/5$ ./5-1.sh 
1 2 3 4 5 6 
1 2 3 4 5 6 
Mon Tue Wed Thu Fri Sat Sun 
{ Mon Tue Wed Thu Fri Sat Sun }

 注意字符串不能用{}花括号括起来表示列表。

上述例子中for循环的步长都是1,实际上,Shell允许用户自己设置步长,语法如下:

for variable in {start..end..step}
do
    statement1
    ...
done

start表示起始值,end表示终止值,step表示步长

下面看示例:

#!/bin/bash

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

结果如下:

eden_ubuntu@edenubuntu:~/Documents/Shell/5$ ./5-2.sh 
2500

for语句是list也可以是Shell命令输出的结果,比如ls命令会输出一个list

 当前ls的命令输出如下:

eden_ubuntu@edenubuntu:~/Documents/Shell/5$ ls
5-1.sh  5-2.sh  5-3.sh

Shell代码如下: 

#!/bin/bash
for file in `ls`
do 
 echo "$file"
done

结果如下:

eden_ubuntu@edenubuntu:~/Documents/Shell/5$ ./5-3.sh 
5-1.sh
5-2.sh
5-3.sh

还有使用通配符*作为条件列表的,这个*号的作用就是列出当前目录中的所有文件,代码如下:

#!/bin/bash
for file in *
do 
 echo "$file"
done

 结果如下: 

eden_ubuntu@edenubuntu:~/Documents/Shell/5$ ./5-4.sh 
5-1.sh
5-2.sh
5-3.sh
5-4.sh

 不带列表的for语句

在某些特殊情况下,for循环的条件列表可以完全省略,称为不带列表的for循环语句。此时,Shell将从命令行获取条件列表,请看示例代码

#!/bin/bash
for arg
do
 echo "$arg"
done

我们输出参数a b c,结果如下:

eden_ubuntu@edenubuntu:~/Documents/Shell/5$ ./5-5.sh a b c
a
b
c

 与使用$*做当条件参数的结果一致。

类C风格的for循环语句

在Linux上,C/C++是最主流的开发语言,为了适应这部分用户的习惯,bash shell也提供了类C风格的for循环,语法如下:

for ((expression1;expression2;expression3))
do
    statement1
    ...
done

举例说明

#!/bin/bash
for ((i=1;i<5;++i))
do
 echo "$i"
done

结果如下:

eden_ubuntu@edenubuntu:~/Documents/Shell/5$ ./5-6.sh 
1
2
3
4

使用for循环处理数组 

语法如下:

for var in ${array[*]}
do
 statement1
 ...
done

 其中array表示数组的名称,请看示例:

#!/bin/bash

alist=(Mon Tue Med)
for day in ${alist[*]}
do
 echo "$day"
done

结果如下:

eden_ubuntu@edenubuntu:~/Documents/Shell/5$ ./5-7.sh 
Mon
Tue
Med

until循环语句

until语句的语法是:

until expression
do
 statement1
 ...
done

其中当expression为真返回0时,跳出循环体。

while循环语句

while语句的语法与until差不多:

while expression
do
 statement1
 ...
done

差别在于, while语句是当expression条件为假返回非0时,跳出循环体。与until正好相反

break和continue

Shell语句里提供了break和continue用于控制循环。

break就是跳出循环,continue是跳过当前循环体中continue后面的语句,重新从循环语句开始的位置执行。这里有C语言经验的都了解就不多讲了。补充一点,Shell的break和continue后面可以加数字参数,语法如下:

break n
continue n

break n表示跳出n层循环,continue n表示跳过n层循环,举例感受下: 

#!/bin/bash

for i in {1..6}
do
    for j in {1..6}
    do
        if [ &j -eq 3 ]
        then
            break 2
        fi
        
        echo "$i $j"
    done
done

结果如下:

eden_ubuntu@edenubuntu:~/Documents/Shell/5$ ./5-8.sh 
1 1
1 2

 小结

本篇主要讲了Shell的循环结构,包括for,until,while,以及控制循环语句break和continue的用法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值