我有一个脚本,需要查看 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 循环在这方面没有进行优化。