您的位置:首页 > 其它

更多的结构化命令 for while until

2015-10-22 16:58 471 查看
for 命令

for var in list

do

commands

done

var in list  默认用 空格做字段分隔符   IFS称为内部字段分隔符 IFS=$'\n'    shell中添加此行 则用换行符作为字段分隔符。

C语言的for命令

for (i=0;i<10;i++)

{

printf("The next number is %d\n",i)

}

第一部分将默认值赋给该变量。中间的部分定义了循环重复的条件。当定义的条件不成立时,for循环就停止了。

bash shell C语言风格for 循环

for (( a=1;a<10;a++))

while 命令

while test command

do

other commands

done

var1=10

while [ $var1 -gt 0 ]

do

echo $var1

var1=$[$var1-1]     #shell中的赋值和操作默认都是字符串处理,在此记下shell中进行数学运算的几个特殊方法

done

详情见shell中数学计算
   1)使用let
   var=1
   let "var+=1"
   echo $var
   输出结果为2,这次没有悲剧
   注意:
   a)经我测试let几乎支持所有的运算符,在网上看到一篇文章说“let不支持++、--和逗号、(、)”,但经我测试自加、自减、以及括号的优先级都得到了很好的支持
   b)方幂运算应使用“**”
   c)参数在表达式中直接访问,不必加$
   d)一般情况下算数表达式可以不加双引号,但是若表达式中有bash中的关键字则需加上
   e)let后的表达式只能进行整数运算

   2)使用(())
   var=1
   ((var+=1))
   echo $var
   输出结果为2
   注意:
   (())的使用方法与let完全相同
   
   3)使用$[]
   var=1
   var=$[$var+1]
   echo $var
   输出结果位2
   注意:
   a)$[]将中括号内的表达式作为数学运算先计算结果再输出
   b)对$[]中的变量进行访问时前面需要加$
   c)$[]支持的运算符与let相同,但也只支持整数运算

Until命令

until test command

do

other commands

done

嵌套循环

eg 

#!/bin/bash

#nesting for loops

for (( a=1;a<=3;a++))

do  

    echo "Starting loop $a:"

    for (( b=1;b<=3;b++))

    do

        echo " Inside loop:$b"

    done

done

linux-boss08:/opt/gl # bash test1.sh 

Starting loop 1:

 Inside loop:1

 Inside loop:2

 Inside loop:3

Starting loop 2:

 Inside loop:1

 Inside loop:2

 Inside loop:3

Starting loop 3:

 Inside loop:1

 Inside loop:2

 Inside loop:3


循环处理文件数据  

在/etc/vim/vimrc中添加以下代码后,重启vim即可实现按TAB产生4个空格:
set ts=4


使用嵌套循环,修改IFS环境变量

经典例子处理/etc/passwd文件中数据。

eg

#!/bin/bash

#changing the IFS value

IFS.OLD=$IFS

IFS=$'\n'

for entry in `cat /etc/passwd`

do

    echo "value in $entry -"

    IFS=:

    for value in $entry

    do

        echo " $value"

    done

done

控制循环  break  continue

break 命令

#!/bin/bash

#breaking out of a for loop

for var in 1 2 3 4 5 6 7 8 9 10

do

    if [ $var -eq 5 ]

    then

        break

    fi

    echo "Iteration number: $var"

done

echo "The for loop is complated"

#!/bin/bash

#breaking out of a for loop

for var in 1 2 3 4 5 6 7 8 9 10

do

    if [ $var -eq 5 ]

    then

        break

    fi

    echo "Iteration number: $var"

done

echo "The for loop is complated"

跳出内部循环

在处理多个循环时,break命令会自动终止你所在最里面的循环:

跳出外部循环

有时你在内部循环,但需要停止外部循环。break命令接受单个命令行参数值:

break n

其中n说明要跳出的循环层级。默认情况下,n为1,表明跳出的时当前的循环。如果你将n设为2,break命令就会停止上一级的外部循环:



#!/bin/bash

#breaking out of an outer loop

for (( a=1;a<4;a++))

do

    echo "Outer loop:$a"

    for ((b=1;b<100;b++))

    do

        if [ $b -gt 4 ]

        then

            break 2

        fi

        echo "  Inner loop:$b"

    done

done

linux-boss08:/opt/gl # bash test5.sh 

Outer loop:1
Inner loop:1
Inner loop:2
Inner loop:3
Inner loop:4

continue命令

continue 命令是提早结束执行循环内部的命令但并不完全终止整个循环的一个途径。

#!/bin/bash

#using the continue command

for ((var1=1;var1<15;var1++))

do

    if [ $var1 -gt 5 ] && [ $var1 -lt 10 ]

    then

        continue

    fi

    echo "Iteration number:$var1"

done

linux-boss08:/opt/gl # bash test6.sh

Iteration number:1

Iteration number:2

Iteration number:3

Iteration number:4

Iteration number:5

Iteration number:10

Iteration number:11

Iteration number:12

Iteration number:13

Iteration number:14

处理循环的输出:

done 可以接    >  |       

done > output.txt

done | sort
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: