现在的位置: 首页 > 综合 > 正文

[shell]shell-for语句总结

2019年01月09日 ⁄ 综合 ⁄ 共 1628字 ⁄ 字号 评论关闭
文章目录

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 $i
done

for i in 1 2 3 4 5;do #详细列出(字符且项数不多)
    echo $i
done

for ((i=1;i<=5;i++));do #((语法循环--有点像C语法,但记得双括号
    echo $i
done

for i in `seq 5`;do  #seq形式 起始从1开始,sequence序列
    echo $i
done

#!/bin/bash

#for in语句与` `和$( )合用,利用` `或$( )的将多行合为一行的缺陷,实际是合为一个字符串数组
for i in `ls`;do
    echo $i
done
#robot  test2.sh  test.sh  workspace

for i in $(ls);do
    echo $i
done
#robot  test2.sh  test.sh  workspace


#打印当前目录下的.sh文件
for  i in $(ls *.sh);do
    echo $i
done
#--->test.sh  test2.sh

#打印当前目录下的.sh文件
for  i in *.sh;do #"*.sh"不是命令,不需要与``,$()来联合使用,若用就会出错
    echo $i
done
#--->test.sh  test2.sh

for i in ls ;do #若是命令而不与``,$()来联合使用,就只会打印命令
    echo $i
done
#-->ls

for i in f1 f2 f3 ;do
    echo $i
done
#-->f1 f2 f3

LIST="root usr data data2"
#打印除带有空格的字符串
for d in $LIST;do #用for in语句自动对字符串按空格遍历的特性,对多个目录遍历 
    echo $d
done
#--->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/bash

echo $IFS  #-->输出为空白,IFS的默认值为空白(换行符,tab、制表符或者空格)

data="name,sex,age"  ##我们可以使用IFS读取变量中的每一个条目
oldIFS=$IFS
IFS=","
echo $IFS ##-->输出为空白,,因为起隔离作用,而不是普通的逗号

for i in $data;do
    echo $i
done
IFS=$oldIFS
#-->name
#-->sex
#-->age

【上篇】
【下篇】

抱歉!评论已关闭.