如何修复shell错误“意外令牌附近的语法错误'elif'”

时间:2010-10-01 15:00:36

标签: shell

我在Xcode项目中将此作为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

我收到此错误:

  

/用户/ AA /升降梭箱/开发人员/ Pandamonia   LLC / iPhone / Acey Deucey / build / Acey   Deucey.build/Release/GenerateLocalizedStrings.build/Script-00F66869125625D9009F14DA.sh:   第7行:意外附近的语法错误   令牌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”]然后'Command / bin / sh失败了   退出代码2

4 个答案:

答案 0 :(得分:5)

首先,不要标记它bashsh,你有一个shell,输入echo $SHELL来知道你使用的是哪个shell,或者在你的开头放一个shebang脚本(#!/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

答案 1 :(得分:4)

then语句需要在新行上,或与;的if条件分开。

答案 2 :(得分: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

答案 3 :(得分:0)

对我来说,问题是结果不正确,应该是LF而不是CRLF
发生这种情况是因为我在 Windows

工作

您可以在 Notepad ++ 中通过以下方式检查:

  

View> Show symbol> Show all characters

并修复:

  

Edit> EOL Conversion> UNIX/OSX Format