使用while 循環 用read 讀取文件內容,直到文件尾部

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






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章