【问题标题】:Getting "syntax error near unexpected token `fi'" in my bash script在我的 bash 脚本中出现“意外标记‘fi’附近的语法错误”
【发布时间】:2015-06-08 02:32:20
【问题描述】:

我很确定我的语法有问题。我制作了一个简单的 if/ifthen 脚本,但它没有执行。我在网上找不到任何关于它的信息,因为我不知道到底是什么问题。

在解决了大部分问题后,我得到了这个输出:

/media/satahd/media/test.sh: line 21: syntax error near unexpected token `fi'
/media/satahd/media/test.sh: line 21: `fi'

这是脚本:

#!/bin/bash

###root symlink folder:
rootmedia='/media/satahd/media/slinktest'

###root donwload folder:
rootdownload='/media/satahd/media/downloads'
TR_TORRENT_NAME=$1
TR_TORRENT_DIR=$2

anime=$rootdownload'/anime'
movie=$rootdownload'/movies'
western=$rootdownload'/western'

if [ $TR_TORRENT_DIR == $anime ] then
    filebot --action symlink --conflict skip --db AniDB --format "{n} ({y})/{n} {s00e00} {t}({group} {vf})" -r -rename $anime/$TR_TORRENT_NAME non-strict --output $rootmedia/Shows/Anime --order absolute
elseif [ $TR_TORRENT_DIR == $movie ] then
    filebot --action symlink --conflict skip --db themoviedb --format "{n} ({y})/{n} ({y}) {group} {vc}-{vf} {ac}-{af}" -r -rename $movie/$TR_TORRENT_NAME -non-strict --output $rootmedia/Movies
elseif [ $TR_TORRENT_DIR == $western ] then
    filebot --action symlink --conflict skip --db thetvdb --format "{n} ({y})/{n} {s00e00} {t}({group} {vf})" -r -rename $western/$TR_TORRENT_NAME non-strict --output $rootmedia/Shows/Western --order absolute
fi

【问题讨论】:

    标签: linux bash syntax scripting debian


    【解决方案1】:

    您为什么不尝试使用elif,而不是elseif

    在 then 之前也放一个;

    当您将thenif 放在同一行时,您需要; 分隔符。如果then 在下一行,则不需要它。

    for *condition* ; do 相同如果dofor 在同一行,则需要;,否则不需要。

    这可能对你更有效,我只是纠正了我提到的问题,但显然这将是我无法轻易测试自己的东西。

    #!/bin/bash
    
    ###root symlink folder:
    rootmedia='/media/satahd/media/slinktest'
    
    ###root donwload folder:
    rootdownload='/media/satahd/media/downloads'
    TR_TORRENT_NAME=$1
    TR_TORRENT_DIR=$2
    
    anime=$rootdownload'/anime'
    movie=$rootdownload'/movies'
    western=$rootdownload'/western'
    
    if [ $TR_TORRENT_DIR == $anime ]; then
        filebot --action symlink --conflict skip --db AniDB --format "{n} ({y})/{n} {s00e00} {t}({group} {vf})" -r -rename $anime/$TR_TORRENT_NAME non-strict --output $rootmedia/Shows/Anime --order absolute
    elif [ $TR_TORRENT_DIR == $movie ]; then
        filebot --action symlink --conflict skip --db themoviedb --format "{n} ({y})/{n} ({y}) {group} {vc}-{vf} {ac}-{af}" -r -rename $movie/$TR_TORRENT_NAME -non-strict --output $rootmedia/Movies
    elif [ $TR_TORRENT_DIR == $western ]; then
        filebot --action symlink --conflict skip --db thetvdb --format "{n} ({y})/{n} {s00e00} {t}({group} {vf})" -r -rename $western/$TR_TORRENT_NAME non-strict --output $rootmedia/Shows/Western --order absolute
    fi
    

    【讨论】:

    • 谢谢!网上好多文章都说不清楚,帮了大忙!
    • sh 和 bash 有点尴尬和丑陋。几乎希望 ruby​​ 成为 OS 8-} 上的标准脚本语言
    【解决方案2】:

    您可以在以下位置检查您的脚本是否存在此类错误

    http://www.shellcheck.net/

    我通常用它来发现我的错误。

    【讨论】:

      猜你喜欢
      • 2015-03-21
      • 1970-01-01
      • 1970-01-01
      • 2015-03-31
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多