在我的bash脚本中获取“意外令牌`fi'附近的语法错误”

时间:2015-04-03 00:52:35

标签: linux bash syntax scripting debian

我很确定我的语法有问题。我已经制作了一个简单的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

2 个答案:

答案 0 :(得分:5)

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

在当时之前加上;

当您将then放在与if相同的行时,您需要;分隔符。如果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

答案 1 :(得分:2)

您可以在

检查脚本中是否存在这类错误

http://www.shellcheck.net/

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