lstファイルを表示し、行を読み取って印刷する必要があるスクリプトがあります。リストに何もない場合はスクリプトを終了する必要がありますが、以下のスクリプトはそれ自体が繰り返され、lstファイルに2つの数字があります(男、桑)。
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
cat
すべてが大丈夫に見えます。ループにaを渡すだけです。
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
ただし、ファイルに多くの行がある場合は、テキスト処理のために特別に設計されたツールまたは他のツールを使用してスクリプトを再構築することをお勧めします。これに関して、シェルループは最適化されない。