第10张 更多结构化命令

10.1  for命令---基本格式

for  var  in list 

do

      command 

done

 

10.1.1  读取列表中的值

for  test   in  a  b  c  d  e  f  g   (任何空白字符都可以作为其读取的分割符

do

    echo  " the  next  is   $test "

done

10.1.2  读取列表中的复杂值

for  test   in  I  don't  know   if  this'll  work

do

      echo  " the  next  is   $test "

done

输出

 the  next  is   I

the  next  is   dont  know  if    thisll

the  next  is   work

shell  看到列表中的单引号,会试图用他们来定义一个单独的数据值,有两种方法解决

1.  使用转义字符来转义单引号

2. 使用双引号来定义使用单引号的值

for  test   in  I  don\'t  know   if  "this'll"  work

do

      echo  " the  next  is   $test "

done

for循环认为每个值 都用 空格  分割,如果有包含空格的数据值 会遇到问题

for  test   in  "New York"  "New Mexico"   

do

      echo  " the  next  is   $test "

done

10.1.3 从变量读取列表

$  list=a b c d e f

for  test   in  $list 

do

       echo  " the  next  is   $test "

done

10.1.4 从命令中读取列表

$ list="string"

for  test   in  `cat $file`

do

      echo  " the  next  is   $test "

done

10.1.5   改变字符分割符

环境变量 IFS(internal  field separator ) 定义了 bash  shell   用作字段分割符的字符列表,默认是

空格

字表符

换行符

如果 bash  在数据中遇到这几种字符的一种,就会认为在数据中启用新的数据字段,当处理包含

这几种字符的文档时,会产生干扰,

解决办法,暂时更改  IFS  值

IFS=$'\n'    IFS  只识别 换行符

如   IFS.OLD=$IFS

      IFS=$'\n' 

     <  write your  code >

     IFS=IFS.OLD

-----------------------------

     IFS=:        将IFS 值设置为  :

     如果需要制定多个 IFS  字符

     IFS=$'\n':;"         使用: ; 换行符 “  作为字符分割符

  10.1.6   使用统配符 读取目录

   可以使用 for 命令 自动迭代文件目录 。为此,必须在文件或 路径中使用通配符,文件 通配,

是生成和指定统配符匹配的文件和路径的过程

  for  file  in  /home/rich/*

  do

        if [   -d    "$file"   ]

        then

                  echo "$file"  is   a  dir

        elif  [  -f  "$file" ]

        then

                  echo "$file" is a file  

        fi

done

10.2  c式的for 循环  ( shell  编程中尽量少用C式的  for  循环 )

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

       <your code>

}

10.3    while  循环

10.3.1   基本形式

while 命令允许定义要测试的命令,测试命令返回 0 退出状态码,就循环一组命令,非0 时while停止执行

while   test  command

do

       <your  code>

done

done 后面可以 接输入 重定向   如   done <  testfile (while   使用   换行符作为 字符分割符 )  

10.3.2  使用多条测试命令

while  命令允许在 while 语句 行 定义多条 test 命令 ,

但只有最后一条测试命令的退出状态码是用来决定循环是何时停止的。

var1=10

while   echo  var1     

            [  var1 -ge 0  ]

do

       echo "this is inside  the loop"

       var1=$[ $var1-1 ]

done

10.4  使用until  命令

until  命令刚好和 while 命令相反,until  需要制定一条测试命令,只有测试命令的退出状态非0,执行

循环中命令,若退出状态为0, 则循环停止

until   test  command

do

     <your  code>

done

10.5  文件数据的循环

通常需要迭代存储在文件内部的项,需要

1.使用嵌套询函

2.更改IFS  值

IFS.OLD=$IFS

IFS=$'\n'

for entry  in 'cat /etc/passwd'

do

     echo "values   in  $entry - "

     IFS=:

     for  value  in $entry

     do

           echo $value

     done

done

10.6   循环控制

break  ;  continue

10.7  处理循环的 输出

可以在循环中使用管道 或者重定向循环输出结果,可以通过在done 命令的末尾添加处理命令

来做到

var1=10

while   echo  var1     

            [  var1 -ge 0  ]

do

       echo "this is inside  the loop"

       var1=$[ $var1-1 ]

done   >  test.txt     ( 将for  命令的结果 重定向到文件 test.txt )

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值