一旦到达输入文件的 EOF 如何终止脚本?

一旦到达输入文件的 EOF 如何终止脚本?

我必须从脚本文件中获取输入:

  $ ./script < input.txt 

我的脚本运行一个无限的 while 循环,您只能通过按 来退出它ctrl-d。如何添加ctrl-d到input.txt,以便script.sh遇到它时自动终止。

 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

该循环将文件的一行分配给一个变量p立刻。请注意循环末尾的重定向运算符 - 它重定向标准输入。

相关内容