意外标记“do”附近的语法错误

时间:2014-05-13 07:40:03

标签: linux shell loops sh

此shell脚本抛出错误消息:

  

意外令牌附近的语法错误

这是我的代码

#!/bin/bash
DIRS="/home/delhi_qa/mkv/18000/marketview/log/FIFO_OPTIMISER/LOGS 1"
DEST="home/delhi_qa/Tests/Ankit/TTLOGSBACKUP"
DELETE_OLD_ZIP_FILES="no" 
BASENAME=/usr/bin/basename 
ZIP=/usr/bin/zip
for i in $DIRS
do
    #On running this unexpected token message occurred at this line#
    zipfile="${DEST}/$(${BASENAME} ${d}).zip"
    echo -n "Creating $zipfile..."
    if [ "$DELETE_OLD_ZIP_FILES" == "yes" ]
    then
        [ -f $zipfile ] && /bin/rm -f $zipfile 
    fi
    ${ZIP} -r $zipfile $d &>/dev/null && echo "Done!"
done

你能告诉我为什么吗?

3 个答案:

答案 0 :(得分:1)

将example.sh文件转换为unix的简便方法是使用NotePad ++(编辑> EOL转换> UNIX / OSX格式)

您还可以在记事本++中设置默认EOL(设置>偏好设置>新文档/默认目录>在格式框下选择Unix / OSX)

参考 - syntax error near unexpected token `$'in\r''

它也解决了这个问题:android_build.sh gives error while building ffmpeg library

我用过这个。它早些解决了我的问题。

devnull和Armali已经指出了这个问题。希望细节能为您提供帮助。

答案 1 :(得分:0)

使用: DIRS =“/ home / delhi_qa / mkv / 18000 / marketview / log / FIFO_OPTIMISER / LOGS \ 1”

在LOGS之后检查其他'\',因为如果不使用'\',linux将不会占用空间。可能是导致错误的那个。要确认其正常工作,您还可以检查是否存在不同的文件夹名称,例如LOG_1。

答案 2 :(得分:0)

  

您的输入文件包含回车符。使用dos2unix或其他东西   类似于摆脱那些。 - devnull

devnull是现货。问题的错误修订3通过扭曲错误消息隐藏了这一点,之前已经读过

syntax error near unexpected token `do
- 注意单独的严重重音(`),bash在令牌名称的开头使用在消息中与最后的撇号(')一起引用令牌。

确切的错误消息必须是e。 G。对于名为./do

的脚本
'/do: line 8: syntax error near unexpected token `do

附加撇号出现在行的开头,覆盖了命令./do的第一个字符。这只能由do之后的回车引起。