[shell]shell-for语句总结

来源:互联网 发布:yyf的淘宝店是哪个 编辑:程序博客网 时间:2024/06/06 14:22

for的列表循环

1)循环体前用in,循环体用{ }大括号括起来,然后用do和done。
2)不带列表的for循环,for后直接跟条件,然后用do和done
3)类C风格的for循环,for后边用(())两层双括号括住条件,条件之间用;分号隔开,然后用do和done。

#!/bin/bash#打印1~5的for语句for i in {1..5};do  #数字段形式    echo $idonefor i in 1 2 3 4 5;do #详细列出(字符且项数不多)    echo $idonefor ((i=1;i<=5;i++));do #((语法循环--有点像C语法,但记得双括号    echo $idonefor i in `seq 5`;do  #seq形式 起始从1开始,sequence序列    echo $idone

#!/bin/bash#for in语句与` `和$( )合用,利用` `或$( )的将多行合为一行的缺陷,实际是合为一个字符串数组for i in `ls`;do    echo $idone#robot  test2.sh  test.sh  workspacefor i in $(ls);do    echo $idone#robot  test2.sh  test.sh  workspace#打印当前目录下的.sh文件for  i in $(ls *.sh);do    echo $idone#--->test.sh  test2.sh#打印当前目录下的.sh文件for  i in *.sh;do #"*.sh"不是命令,不需要与``,$()来联合使用,若用就会出错    echo $idone#--->test.sh  test2.shfor i in ls ;do #若是命令而不与``,$()来联合使用,就只会打印命令    echo $idone#-->lsfor i in f1 f2 f3 ;do    echo $idone#-->f1 f2 f3LIST="root usr data data2"#打印除带有空格的字符串for d in $LIST;do #用for in语句自动对字符串按空格遍历的特性,对多个目录遍历     echo $ddone#--->root usr data data2#打印出/var/log/路径下的所有文件和文件夹,注意有路径for i in /var/log/*;do    echo $i   done#-->/var/log/yum.log /var/log/httpd ...#--打印当前目录下的文件名和文件夹名,注意是没有路径的for i in *;do    echo $i  done#-->workspace test.sh group1 test2.sh
for循环的运作方式是讲串行的元素意义取出,依序放入指定的变量中,然后重复执行命令区域(在do和done 之间),直到所有元素取尽为止。
其中,串行是一些字符串的组合,彼此用$IFS所定义的分隔符(如空格符)隔开,这些字符串称为字段。

IFS

IFS(Internal Field Seperator)在Linux的shell中预设的内部字段分隔符,用来把command line分解成word(字段)。
IFS可以是White Space(空白键)、Tab( 表格键)、Enter( 回车键)中的一个或几个。

IFS是shell脚本中的一个重要概念,在处理文本数据时,它是相当有用的。内部字段分隔符是用于特定用途的定界符IFS是存储定界符的环境变量,它是当前shell环境使用的默认定界字符串。IFS的设置方法很简单,和普通变量设置方法类似:IFS=":"
建议设置IFS前保存原IFS的值,在使用后及时恢复

#!/bin/bashecho $IFS  #-->输出为空白,IFS的默认值为空白(换行符,tab、制表符或者空格)data="name,sex,age"  ##我们可以使用IFS读取变量中的每一个条目oldIFS=$IFSIFS=","echo $IFS ##-->输出为空白,,因为起隔离作用,而不是普通的逗号for i in $data;do    echo $idoneIFS=$oldIFS#-->name#-->sex#-->age

0 0