读取线路问题

读取线路问题

我有一个脚本,需要查看 lst 文件并读取该行并打印该行,如果列表中没有任何内容,则需要退出该脚本,但下面的脚本正在循环自身,并且 lst 文件有两个数字(man ,桑)。

vi do.lst 
man
san

代码:=

  cat /ora/do.lst
  while read -r line
  do
   if [[ -z $line ]]
     then
         echo "The list is empty "
          exit
  else
      lst_no=${line},
      echo "${line} is processing now "
  fi
  done

答案1

一切看起来都很好,你只需要将 a 传递cat到循环中:

cat /ora/do.lst |  while read -r line
  do
   if [[ -z $line ]]
     then
       echo "The list is empty "
       exit
     else
      lst_no=${line},
      echo "${line} is processing now "
   fi
done

这显然不是处理生产线的最佳方式,但我认为这只是出于学习目的。


更好一点的是至少避免无用cat和不必要的管道:

while read -r line; do
...
done </ora/do.lst

或者更好的是,为循环内的命令保留标准输入:

while read -r line <&3; do
...
done 3</ora/do.lst

awk但是,如果您的文件有很多行,您可能需要考虑使用或perl其他专用于文本处理任务的工具重写脚本。 Shell 循环在这方面没有进行优化。

相关内容