1.16字段分隔符和迭代器

网友投稿 536 2022-09-26

1.16字段分隔符和迭代器

1.16字段分隔符和迭代器

内部字段分隔符(Internal Field Separator,IFS)是shell脚本编程的一个重要概念。下面将讨论把单个数据流划分成不同数据元素的定界符(delimiter),内部字段分隔符是用于特定用途的定界符。IFS是存储定界符的环境变量。它是当前shell环境默认使用的默认定界字符串。

1、考虑一种情形,我们需要迭代一个字符串或逗号分隔型数值(Comma Separated Value,CSV)中的单词。如果是前一种,则使用IFS=".";如果是后一种,则使用IFS=","。如下

考虑CSV数据的情形:

data="name,sex,rollno,location"

我们可以使用IFS读取变量中的每一个条目。

oldIFS=$IFSIFS=, #now IFS为,for item in $data;do  echo Item: $itemdoneIFS=$oldIFS

IFS的默认值为空白符(换行符、制表符或者空格)

2、在文件/etc/passwd中,每一行包含了由冒号分隔的多个条目。文件中的每行都对应一位用户的相关属性。

考虑这样的输入:root:x:0:0:root:/root:/bin/bash。每行的最后一项指定了用户的默认shell。利用IFS打印出用户以及他们对应的默认shell:

#!/bin/bash#演示IFS的用法line="root:x:0:0:root:/root:/bin/bash"oldIFS=$IFS;IFS=":";count=0for item in $linedo [ $count -eq 0 ] && user=$item; [ $count -eq 6] && shell=$item;  let count++;done;IFS=$oldIFSecho $user\'s shell is $shell;

输出为

root's shell is /bin/bash

对一些列值进行迭代时,循环非常有用;

for 循环for var in list;do  commands;#使用变量$vardone

list 可以是一个字符串,也可以是一个序列。

echo {1..50}能够生成一个从1~50的数字列表。同理echo {a..z}或{A..Z}或{a..h}可以生成子母表。

变量i在每次迭代的过程中都会保存一个字符,范围从a~z;

for i in {a..z};do actions;done;for循环也可以采用C语言的for格式:for(i=0;i<10;i++)  commands;#使用变量$iwhile循环while condition  do  commands;  done

用true作为循环条件能够产生无限循环。

until循环

在bash中还可以使用一个特殊的循环until。它会一直执行循环,直到给定的条件为真。

x=0;until [ $x -eq 9 ];#条件是[ $x -eq 9 ]do  let x++;  echo $x;done

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring Security权限管理实现接口动态权限控制
下一篇:2命令之乐,2.1简介
相关文章

 发表评论

暂时没有评论,来抢沙发吧~