文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>温故知新2

温故知新2

时间:2010-09-24  来源:csbird

1、shell脚本的for语句的基本格式

for var in list

do

  commands

done

这里的list是一串用空格(空格、tab字符、换行符)分开的值,也可以是其他命令产生的列表值。

可以通过修改环境变量IFS的值来使得for语句可以处理其他分隔符的列表,比如/etc/passwd的值是用冒号分开的,

设置IFS=$'\n':,分割符为回车和冒号。每次修改IFS的值之前最好先保存原来的值,在你的处理过程结束后再把它恢复

IFS.OLD=$IFS

IFS=$'\n':

#your processing code

IFS=$IFS.OLD

 

for语句支持c形式的循环,基本格式:

for ((variable assignment; condition; iteration process))

比如 for ((a = 1; a < 10; a++))。这里有几个跟通常的bash标准不同的地方:

变量赋值可以包含空格;条件表达式中的变量引用不需要$符号;最后的循环迭代部分不需要使用expr命令的格式。

另外在c形式的for循环语句中可以使用多个变量:

for ((a=1,b=10;a<=10;a++,b--))

 

2、break和continue

break可以结束当前的循环;在嵌套循环中,可以用break n语句跳出外部的循环,这里的n为要跳出的循环的层数,

默认值为1,即当前循环。例如:

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

do

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

  do

    if [ $b -gt 4]

    then

      break 2

  done

done

当b>4时会结束整个循环。

continue也类似。

 

3、可以把循环块的输出进行重定向,或者用管道传给其他命令:

for ...

do

  echo "hello"

done > output.txt

 

while ...

do

  echo "hello"

done | sort

 

4、一个小技巧:

在处理文本文件时,常常需要先以行为单位来处理,然后对每一行用指定的分隔符再处理,比如读取/etc/passwd文件:

IFS.OLD=$IFS

#分割符设为换行符,先以行为单位处理

IFS=$'\n'

for line in `cat /etc/passwd`

do

  #每一行的值用冒号分隔

  IFS=:

  for value in $line

  do

    #your processing code

  done

done

IFS=$IFS.OLD

注意这里的环境变量IFS的使用

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载