使用while循环一次读取文件的一行,直到文件尾部格式如下:while read line; do  \\ line 为一个变量,表示读取到一行的字符

循环体

done 

使用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 

或可以通过管道传给{}的指令组如下所示#!/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 

或#!/bin/bash

#

while read line;do

[[ `echo $line | cut -d: -f7` =~ bash$ ]] && echo $line | cut -d: -f1,7

done 

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 

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 

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 

或#!/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 

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  

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐