2014-03-13 198 views
0

我写了一个while循环来搜索内部文件并将输出附加到文本文件,但它好像只读取了该文本文件的第一行。我如何解决它 ?bash脚本,循环不循环

while read line 
do 
x=`echo $line` 
y=`grep $x: /etc/group | cut -d ":" -f 3` 
grep $y /etc/passwd | cut -d ":" -f 1 >> users 
grep $y /etc/group | cut -d ":" -f 4 | tr "," "\n" >> users 
done < filename 
+0

“filename”包含什么? –

回答

0

也许你需要用引号括$x$y,否则grep可以在第一空间作为文件名后解释什么搜索:

#!/bin/bash                                  

while read line 
do 
    x=`echo $line` 
    y=`grep "$x:" /etc/group | cut -d ":" -f 3` 
    grep "$y" /etc/passwd | cut -d ":" -f 1 >> users 
    grep "$y" /etc/group | cut -d ":" -f 4 | tr "," "\n" >> users 
done < filename 
0

这可能是有点因为某些grep语句可能会选取错误的字段(即它不检查正确的字段):

while read GROUP 
do 
    GROUP_ID=`grep ^$GROUP: /etc/group | cut -d ":" -f 3` 

    USER_ENT=`grep -e '\(.*:\)\{3\}'$GROUP_ID':' /etc/passwd` 
    [ $? -eq 0 ] && cut -d ":" -f 1 <<<$USER_ENT 

    GROUP_ENT=`grep -e '\(.*:\)\{2\}'$GROUP_ID':' /etc/group` 
    [ $? -eq 0 ] && cut -d ":" -f 4 <<<$GROUP_ENT | tr "," "\n" | grep -v ^$ 

done < $FILE_NAME | sort | uniq >users