2010-10-01 130 views
2

我有这样的运行作为一个Shell脚本目标在我的Xcode项目“附近意外的标记‘elif的’语法错误”如何解决shell错误

# shell script goes here 
genstrings -u -a -o en.lproj *[hmc] */*[hmc] */*/*[hmc] 
if [ -f "$PROJECT_DIR/build/Release-macosx/UnicodeEscape" ] then 
    build/Release-macosx/UnicodeEscape "en.lproj/Localizable.strings" 
elif [ -f "$PROJECT_DIR/build/Debug-macosx/UnicodeEscape" ] then 
    build/Debug-macosx/UnicodeEscape "en.lproj/Localizable.strings" 
fi 

exit 0 

我得到这个错误:

/Users/aa/Dropbox/Developer/Pandamonia LLC/iPhone/Acey Deucey/build/Acey Deucey.build/Release/GenerateLocalizedStrings.build/Script-00F66869125625D9009F14DA.sh: line 7: syntax error near unexpected token elif' /Users/aa/Dropbox/Developer/Pandamonia LLC/iPhone/Acey Deucey/build/Acey Deucey.build/Release/GenerateLocalizedStrings.build/Script-00F66869125625D9009F14DA.sh: line 7: elif [ -f "$PROJECT_DIR/build/Debug-macosx/UnicodeEscape" ] then' Command /bin/sh failed with exit code 2

回答

5
所有的

首先,不要将其标记为bashsh,你有一个外壳,类型echo $SHELL知道哪个壳您使用,或把家当在脚本的开始(#!/usr/bin/env bash

在命令后面加上分号,包括[ ... ]这是test的别名。命令终止符是换行符,;,&&,||&并且是强制性的。您可以在ifthen之间放置几个命令,因此这些分号是强制性的。

if [ -f "$PROJECT_DIR/build/Release-macosx/UnicodeEscape" ] ; then 
    build/Release-macosx/UnicodeEscape "en.lproj/Localizable.strings" ; 
elif [ -f "$PROJECT_DIR/build/Debug-macosx/UnicodeEscape" ] ; then 
    build/Debug-macosx/UnicodeEscape "en.lproj/Localizable.strings" ; 
fi 
+0

的','在声明的结尾是无用的空语句。 – Jens 2012-05-08 10:18:41

+0

@Jens:除非你不换线。 – Benoit 2012-05-08 13:58:50

+1

我不明白你想说什么。你能改说吗? – Jens 2012-05-08 14:04:05

4

then声明必须在一个新行,或如果条件与;分开。

3

在关键字then之前需要分号。

# shell script goes here 
genstrings -u -a -o en.lproj *[hmc] */*[hmc] */*/*[hmc] 
if [ -f "$PROJECT_DIR/build/Release-macosx/UnicodeEscape" ]; then 
    build/Release-macosx/UnicodeEscape "en.lproj/Localizable.strings" 
elif [ -f "$PROJECT_DIR/build/Debug-macosx/UnicodeEscape" ]; then 
    build/Debug-macosx/UnicodeEscape "en.lproj/Localizable.strings" 
fi 

exit 0 
0

对我来说,这个问题竟然是不正确的行结束这应该是LF,而不是CRLF
发生这种情况是因为我从Windows开始工作。

您可以通过在记事本++检查:

View >Show symbol >Show all characters

和修复:

Edit >EOL Conversion >UNIX/OSX Format