2015-10-04 154 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 
相关问题