2015-10-04 155 views
0

我的shell腳本出現了一些問題。第一個問題是如果我在提示用戶的時候輸入「否」或「n」,我會得到一個錯誤,提示「沒有endif」。我的3個endif在這種情況下不工作嗎?Shell腳本無法正常工作

此外,我的循環應該檢查一個文件已經改變,如果它沒有不復制它,如果它複製它。但是,我的比較不起作用,它每次都複製每個文件。

#!/usr/bin/tcsh 

if (! -d backup) then 
    echo "The backup folder does not exist. Would you like to create it? Y for Yes N for No" 
    set userAnswer=$< 
    if ($userAnswer == "yes" || $userAnswer == "y"|| $userAnswer == "Y" || $userAnswer == "YES") then 
     mkdir backup 
     else if ($userAnswer == "no" || $userAnswer == "n"|| $userAnswer == "N" || $userAnswer == "NO") then 
      echo "No directory created" 
      else 
       echo "Invalid response" 
       exit 1 
      endif 
     endif 
    endif 
else 
foreach i (*.c) 
    if ("$i" == "/backup/$i") then 
     echo file has not changed 
    else 
     cp $i backup 
     echo test 
    endif 
end 
endif 

回答

1

你有一組的第一行縮進之間線和其他聲明約爲13線進一步下跌。 if/else語句的if/else/ENDIF語句中,這應該是隻有一個endif這樣塊已經一個嵌套:

if ($userAnswer == "yes" || $userAnswer == "y"|| $userAnswer == "Y" || $userAnswer == "YES") then 
    mkdir backup 
else if ($userAnswer == "no" || $userAnswer == "n"|| $userAnswer == "N" || $userAnswer == "NO") then 
    echo "No directory created" 
else 
    echo "Invalid response" 
    exit 1 
endif 
0

如果你有3分ENDIF的,你只需要1 ...(我認爲)SH變形金剛迷*

1

使用switch可能簡化代碼位:

#!/usr/bin/tcsh 

if (! -d backup) then 
    echo "The backup folder does not exist. Would you like to create it? Y for Yes N for No" 
    set userAnswer=$< 
    switch ($userAnswer) 
     case [yY][eE][sS]: 
      echo "Answer was yes" 
      breaksw 
     case [yY]: 
      echo "Answer was yes" 
      breaksw 
     case [nN][oO]: 
      echo "Answer was no" 
      breaksw 
     case [nN]: 
      echo "Answer was no" 
      breaksw 
    endsw 
    # .... 
endif 
相關問題