2016-05-10 24 views
0

我不確定我在這裏錯過了什麼。我有以下讀取循環在我的計劃:讀取循環中意外的語法錯誤

while true 
do 
    read -p "Would you like to enter an end date (y/n) (if no, end date will default to today) " answer 

    case $answer in 
    [yY]*) while true 
      do 
       read -p "Please enter an end date in yyyymmdd format: " answer 

       echo Running script from dates $startDate to $answer 
       ruby $DIR/dinersDataAutomation.rb -s $startDate -e $answer 
       break 
      done 
      break 

    [nN]*) echo Running script with a start date of $startDate 
      ruby $DIR/dinersDataAutomation.rb -s $startDate 
      break 

    *)  echo "Please enter Y or N" 
    esac 
done 

這將產生以下錯誤:

./getDinersInfo.sh: line 56: syntax error near unexpected token `)' 
./getDinersInfo.sh: line 56: `  [nN]*) echo Running script with a start date of $startDate' 

對於我的生活,我不能找出錯誤可能是什麼。 $startDate在先前的讀取循環中被定義,所以我知道這並不是$startDate未定義的事實。

我很感激第二組眼睛讓我知道我在這些線上缺少的東西。

+0

哪一行是56行? –

回答

1

您沒有用雙分號結束前面的程序段。

case $answer in 
    [yY]*) while true 
      do 
       read -p "Please enter an end date in yyyymmdd format: " answer 

       echo Running script from dates $startDate to $answer 
       ruby $DIR/dinersDataAutomation.rb -s $startDate -e $answer 
       break 
      done 
      break 
      ;; 

    [nN]*) echo Running script with a start date of $startDate 
      ruby $DIR/dinersDataAutomation.rb -s $startDate 
      break 
      ;; 

    *)  echo "Please enter Y or N" 
      ;; 
esac 
+0

另外,什麼是'而真實的;做...;打破; done'? '...'具有相同的效果,噪音少得多。 – rici

+0

我辯論是否解決這個問題;它可能是一個語義錯誤(不是在跳出循環之前測試'answer'的值),但它不是一個語法錯誤。 – chepner

+0

可能,但是您從外部'while'循環中刪除了'break'語句,這使得它成爲無限的,而不是僅在'*)'情況下重複。 (這些'break'語句不是(僅僅)打破'case')。當我第一次看Q時,我認爲OP相信你只能在while循環中使用'read',但現在我傾向於認爲這是一種稍微扭曲的風格。 – rici