入力ファイルのEOFに達したときにスクリプトを終了する方法は?

入力ファイルのEOFに達したときにスクリプトを終了する方法は?

スクリプトファイルから入力を受け取る必要があります。

  $ ./script < input.txt 

私のスクリプトは無限のwhileループを実行し、を押すだけで終了できますctrl-dctrl-dscript.shが見つかったら自動的に終了するようにinput.txtにどのように追加しますか?

 while true;
 do
   echo 'blah blah'
   read i      # takes from file 
   case $i in
   a ) 
          echo 'blah blah'
          read j #takes from file 
   .......
   *)     echo 'invalid option'
          continue
      ;;
   esac
 done

このループは、ユーザーがctrl-Dを押すか、input.txtの終わりに達するまで続行する必要があります。

答え1

read状況に応じて、以下を使用してくださいwhile

while read -r a; do
  echo 'blah blah'
  case "$a" in
    a)
      echo 'blah blah'
      read -r b
      echo "line: $b"
      ;;
    *)
      echo 'invalid option'
      continue
      ;;
  esac
done

ファイルの終わりに達すると、ループは終了します。

答え2

スクリプトが最初に何をしているのかを見てみると良いでしょう。このようなファイルを読み取るときは、次のようにファイルの内容を読み取ることができます。しかし、リング:

while read p; do
   echo $p
done <&0

このループはファイルの1行を変数に割り当てます。すぐに。ループの末尾にあるリダイレクト演算子に注意してください。これは標準入力をリダイレクトします。

関連情報