为什么这个脚本在txt文件的第一行循环?

为什么这个脚本在txt文件的第一行循环?
#!/bin/bash
usernameFile="/home/netadmin/username_list.txt"

logFile="/var/log/netvpn-mag-archive/netvpn-mag-20160"

  while read -r line < $usernameFile; do
    if [[ "$line" != " " ]]; then
            zgrep -w "$line" "$logFile"* >> grep_output.txt
    fi
  done < "$usernameFile"

使用此脚本,我想对用户名文件中的每个用户的日志文件进行 grep 处理。目前,该脚本正在一遍又一遍地循环第一个用户名。我需要它在浏览完日志文件目录中的所有文件后停止并移动到列表中的下一个名称。

答案1

有两个地方可以输入“$usernameFile”:一个在全局循环中,另一个在读取中。

while read -r line < $usernameFile; do

done < "$usernameFile"

我认为你应该只在全局循环中输入它。 (换句话说,只将其放在“完成”之后。)

答案2

cat "$usernameFile" | while read line;
do
   if [[ "$line" != " " ]]; then
     zgrep -w "$line" "$logFile"* >> grep_output.txt
   fi
done

相关内容