Shell---循环结构

来源:互联网 发布:搜狐网络大厦it 编辑:程序博客网 时间:2024/05/22 03:30

Shell下的循环结构是类C的,同样也有for循环、while循环,此外,Shell也有until循环。

for循环

  • for循环的基本语法
for variable in {list}do    statement1    statement2    ...done

for循环的语法意思与C语言一样,即执行循环体的次数由list决定。list在这里是一个列表,可以是一系列的数字或字符串,元素之间用空格隔开

举例:依次打印出1~10。

1、列出list列表:

 #! /bin/bash for i in 1 2 3 4 5 6 7 8 9 10 do     echo "number is $i" done~            

2、list列表可以表示为:{1..8}

 #! /bin/bash for i in {1..8} do     echo "number is $i" done

运行结果:
这里写图片描述

  • 改变for循环增长步长
    上述方式的for循环中,变量每次只能增长1,Shell允许用户自定义增长步长。
    基本语法为:
for variable in {start..end..step}do    statement1    statement2    ...done

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

举例:通过for循环输出100以内奇数的和:

#! /bin/bashsum=0for i in {1..100..2}do    let "sum+=i";doneecho "result is : $sum"
  • 不带列表的for循环
    我们先来了解几个Shell中的位置参数:
$0:相当于main函数参数的argv[0]$1$2...:称为位置参数,相当于main函数参数的argv[1],argv[2]....$#:相当于main函数的argc-1,这里的#不表示注释$@:表示参数列表"$1","$2",可以用在for循环in的后边$?:上一条命令的退出码$$:当前shell的进程号

举例:输出每命令行的每个参数

for val in $@do    echo "$val"done

不带列表的循环实现为:

for valdo    echo "$val"done

以上两种实现方式是等效的。

  • 类C风格的for循环
for ((expression1;expression2;expression3))do    statement1;    statement2;    ...done

举例:用该中方式打印1~10

for (( i=1;i<10;i++ ))do    echo "number is $i"done
  • for循环处理数组
    基本语法:
for variable in ${array[*]}do    statement1;    statement2;    ...done

举例:打印数组内容

array=(1 2 3 4 5 6 7 8)     #这句表示定义一个数组for i in ${array[*]}do    echo $idone

while循环

  • while循环基本用法
    基本语法:
while expressiondo    statement1    statement2    ...done

while循环的语法与C语言的while循环仍是一样,只要条件满足就执行。

举例:使用while循环输出1~9的平方

i=1while [ "$i" -lt 10 ]do    let "square=i*i"    echo "$i*$i=$square"    let "i+=1"done

输出结果:
这里写图片描述

until循环

  • until循环的基本用法
    基本语法:
until expressiondo    statement1    statement2    ...done

until循环与C语言中的do…while循环类似,即反复执行循环体,直到某一条件成立则退出循环体。

举例:使用until循环执行上述while循环的例子,即打印1~9的平方。

i=1until [ "$i" -gt 10 ]  #这就需要判断i大于10时退出循环do    let "square=i*i"    echo "$i*$i=$square"    let "i+=1"done

使用break和continue控制循环

  • 利用break控制循环
    break的作用是立即跳出某个循环。

举例:输出5以内的乘法表

#! /bin/bashfor ((i=1;i<9;i++))do    for ((j=1;j<=i;j++))    do        let "result=$i*$j"        printf "$i * $j = $result   "    done    printf "\n"#当i变量的值为5时退出循环    if [ $i -eq 5 ]    then        break    fidone

输出结果为:
这里写图片描述

  • 利用continue控制循环
    continue的作用是跳过当前循环体中该句后边的语句,重新从循环体开始执行。

举例:输出10以内的偶数

#打印10以内的偶数for val in {1..10}do    if [[ "$val2" -eq 1 ]]    then        continue    fi    printf "$val  "doneprintf "\n"

运行结果为:
这里写图片描述

原创粉丝点击