Большинство ответов были сосредоточены на целочисленных / строковых и пробелах, что хорошо, но ваш код выглядит настолько однотипным, что IMO должен быть полностью переработан. Допустим, идея состоит в том, чтобы обрабатывать строки, пока одна строка не будет соответствовать регулярному выражению 'test':
while read line; do
if [[ "$line" =~ test ]] && break
# do something with $line
done
Конечно, это можно еще больше упростить, если вы воспользуетесь такими инструментами обработки текста, как sed:
sed -e '/test/,$d'