input.txt がよみこむテキストファイルの場合
こんな感じです。
while IFS='' read -r line && [[ -n "$line" ]]; do echo $line; done < input.txt
なぜ、IFS='' するのですか?
IFSってのはbashの環境変数で、デフォルトでは$' ¥t¥n'(スペース・タブ・改行)が入っています。
そのままだと、半角スペースとタブがかってに消されてしまうため、空文字を設定しています。
read -r のオプションは何のためですか?
バック・スラッシュをエスケープ文字とみなさないで、そのまま取得するため。