読む行の問題

読む行の問題

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

awkperlただし、ファイルに多くの行がある場合は、テキスト処理のために特別に設計されたツールまたは他のツールを使用してスクリプトを再構築することをお勧めします。これに関して、シェルループは最適化されない。

関連情報