while true
do
read line1 || break
read line2 || break
read line3 || break
echo $line1
echo $line2
echo $line3
echo ""
done <foo.txt
Isso produz a saída:
line1
line2
line3
line4
line5
line6
line7
line8
line9
Para programar defensivamente, devemos permitir arquivos cujo número total de linhas não seja um múltiplo de três. Nesse caso, para garantir que todas as linhas sejam processadas:
while true
do
read line1 || break
echo $line1
read line2 || break
echo $line2
read line3 || break
echo $line3
echo ""
done <foo.txt