更多的结构化命令 for while until

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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值