您的位置:首页 > 其它

使用while 循环 用read 读取文件内容,直到文件尾部

2016-03-14 15:57 591 查看
使用while循环一次读取文件的一行,直到文件尾部格式如下:

while read line; do  \\ line 为一个变量,表示读取到一行的字符
循环体
done < /path/to/somefile
使用read由标准输入读取数据,放入变量line中,如果读到的数据非空,就进入循环。

示例:
取得/etc/passwd的用户名及shell
#!/bin/bash
#
IFS=':'    ## 改变字段分隔符
while read f1 f2 f3 f4 f5 f6 f7     ## 将读取的各行帐号放入f1-9的变量中
do
echo "userName: $f1  ;userShell: $f7"   ## 输出变量
done < /etc/passwd
或可以通过管道传给{}的指令组如下所示

#!/bin/bash
#
IFS=':'    ## 改变字段分隔符
cat /etc/passwd | {
while read f1 f2 f3 f4 f5 f6 f7     ## 将读取的各行帐号放入f1-9的变量中
do
echo "userName: $f1  ;userShell: $f7"   ## 输出变量
done
}
练习:
1、取出当前系统上,默认shell为bash的用户
#!/bin/bash
#
while read line;do
if [[ `echo $line | cut -d: -f7` =~ bash$ ]];then
echo $line | cut -d: -f1,7
fi
done < /etc/passwd

#!/bin/bash
#
while read line;do
[[ `echo $line | cut -d: -f7` =~ bash$ ]] && echo $line | cut -d: -f1,7
done < /etc/passwd


2、显示所有其ID号为偶数的用户
#!/bin/bash
#
while read line;do
if [[ $[`echo $line | cut -d: -f3`%2] -eq 0 ]];then
echo $line | cut -d: -f1,3
fi
done < /etc/passwd


3、显示/etc/rc.d/rc.sysinit文件中,其总字符个数大于30的行
#!/bin/bash
#
while read line;do
if [ `echo $line | wc -c` -gt 30 ];then
echo "`echo $line | wc -c`:$line"
fi
done < /etc/rc.d/rc.sysinit


4、显示所有其UID和GID均为偶数的用户;
#!/bin/bash
#
while read line;do
if [ $[`echo $line | cut -d: -f3`%2] -eq 0  ] && [ $[`echo $line | cut -d: -f4`%2] -eq 0 ];then
echo $line | cut -d: -f1,3-4
fi
done < /etc/passwd

#!/bin/bash
#
while read line;do
userID=`echo $line | cut -d: -f3`
groupID=`echo $line| cut -d: -f4`
userName=`echo $line| cut -d: -f1`
[ $[$userID%2] -eq 0 ] && [ $[$groupID%2] -eq 0 ] && echo "$userName : $userID : $groupID"
done < /etc/passwd


5、显示/etc/rc.d/rc.sysinit文件中,其总字符个数大于30且非以“#”开头的行;

#!/bin/bash
#
while read line;do
if [ `echo $line | wc -c` -gt 30 ] && echo $line | grep "^#" ;then
echo $line
fi
done  < /etc/rc.d/rc.sysinit


本文出自 “菜鸟日志” 博客,请务必保留此出处http://zkxfoo.blog.51cto.com/1605971/1750925
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: