linux - 在我的 bash 脚本中获取 "syntax error near unexpected token ` fi'"

标签 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

最佳答案

为什么不尝试使用 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

关于linux - 在我的 bash 脚本中获取 "syntax error near unexpected token ` fi'",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29424771/

相关文章:

linux - 为什么 setsid 无法退出 shell 脚本?

linux - 从字符串中压缩

linux - 用于远程连接到其他系统并在其中执行一堆命令的shell脚本

c - 协调 C 中数组的声明和使用语法

symfony - 我的composer.json 文件中的波形符 (~) 是什么意思?

Python 请求 'Connection aborted.' 如果它将以 cronjob 开始

linux - 如何在 Redhat Linux 中设置 Lumberjack(logstash 转发器)

linux - 在子网中查找网关公网IP

syntax - SQL查询以截断IBM DB2中的表

linux - 为什么waitpid(2)可以指定非子进程?