使用while循环一次读取文件的一行,直到文件尾部格式如下:
while read line; do \\ line 为一个变量,表示读取到一行的字符 循环体 done < /path/to/somefile
练习:
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
使用while read 循环,一次读取文件一行,直到文件尾部退出循环
原文:http://zkxfoo.blog.51cto.com/1605971/1750925