Shell if if else语法错误,而实际语法似乎正确

时间:2016-08-17 12:11:43

标签: shell if-statement sh

所以我有一个包含大if / fi块的shell脚本,它工作正常,直到我决定为这个大else放置if个案例} / fi阻止。现在我收到了这个错误:

/root/VVPN/Scripts/scriptPrincipal.sh: line 201: syntax error near unexpected token `else'
/root/VVPN/Scripts/scriptPrincipal.sh: line 201: `else'

我经历了8到10次stackoverflow帖子,其中人们有完全相同的错误,除了所有这些都是简单的语法错误,如if语句的[之后缺少空格,或{{1} }而不是:关键字之前的;,或then用于已else关闭的if等等...(你明白了fi)。

但是,我一遍又一遍地检查了我的代码中的所有这些错误,并且在:p / if / else语法方面,一切似乎都是正确的。我甚至向一些同事展示了代码,他们也找不到这个错误的原因。

以下是代码:

fi

所以错误中提到的else(在第201行)实际上是代码中的最后一个。没有这个以及后面的回声,脚本工作正常。

我们非常感谢您提供任何帮助if [ ${CP} != "continue" ] then echo 'Downloading the necessary files from the server...' # If folder F*** doesn't exist in /root/VVPN/Numbers if [ ! -d ${N} ] then # Create folders F***, and F***/Results mkdir ${N} mkdir ${N}/Results cd ${N} # Get real number to factorize from server (e.g: wget server.com:8000/route/to/F1067/F1067) ROUTE="VVPN/Numbers/${N}/${N}" REAL_NUM_FILENAME=${N} while true do wget --retry-connrefused --tries=inf -q ${SERVER}/${ROUTE} -O ${REAL_NUM_FILENAME} --continue if [ $? -eq 0 ]; then break fi sleep 1 done # Get ECM-Program tuned for this number from server (e.g: wget server.com:8000/route/to/F1067/ecm) ROUTE="VVPN/Numbers/${N}/ecm" PROGRAM_NAME='ecm' while true do wget --retry-connrefused --tries=inf -q ${SERVER}/${ROUTE} -O ${PROGRAM_NAME} --continue if [ $? = 0 ]; then break fi sleep 1 done else # The folder already exists, now we have to check whether the number has ",c" label or not cd ${N} fi # Give the permission to execute program chmod +x ecm # Make 6 directories, one for each SPE for i in {1..6} do mkdir "SPE${i}" cp ecm "SPE${i}/" done # if there is no checkpoints: if [ $CP = $N ] then # Get currentSigma for this number from server (e.g : wget server.com:8000/rout/to/F1067/currentSigma.txt) ROUTE="VVPN/Numbers/${N}/currentSigma" REAL_FILE_NAME='sigma' while true do wget --retry-connrefused --tries=inf -q ${SERVER}/${ROUTE} -O ${REAL_FILE_NAME} --continue if [ $? = 0 ]; then break fi sleep 1 done else #The number has a ",c" label (= w/ checkpoint) # Get i (server sigma) and C (current job counter) from the server (e.g: wget server.com:8000/route/to/F1067/icy) ROUTE="icy?number=${N}" SIGMA_C_Y='icy' while true do wget --retry-connrefused --tries=inf -q ${SERVER}/${ROUTE} -O ${SIGMA_C_Y} --continue if [ $? = 0 ]; then break fi sleep 1 done i=$(cat ${SIGMA_C_Y} | cut -d "," -f1) C=$(cat ${SIGMA_C_Y} | cut -d "," -f2) Y=$(cat ${SIGMA_C_Y} | cut -d "," -f3) echo $i > sigma echo $C > /root/VVPN/Scripts/C # Get the checkpoints from the server ROUTE="VVPN/Numbers/${N}/CP/${i},${C},${Y}" for speNum in {1..6} do SPE="SPE${speNum}" touch $SPE/again for bigX in {0..3} do CHECKPOINT="pointsCurve${bigX}.${Y}" while true do wget --retry-connrefused --tries=inf -q ${SERVER}/${ROUTE}/${SPE}/${CHECKPOINT} -O ${CHECKPOINT} --continue if [ $? = 0 ]; then mv $CHECKPOINT $SPE break fi sleep 1 done done done fi cd .. else echo "Found ${N}'s folder on this PS3" fi

1 个答案:

答案 0 :(得分:1)

如果[$ CP = $ N]如下所示,您是否可以更改;

if [ "$CP" == "$N" ]

这不是别的问题;例如;如果运行以下代码,则输出相同。所以你应该将其他命令集中在if语句中。

CP="continue1"
if [ ${CP} != "continue" ]
then
   while   #this is wrong 
   echo ok
   echo ok
   echo ok
else
fi

./test.sh: line 8: syntax error near unexpected token `else'
./test.sh: line 8: `else'