【问题标题】:Bash - unexpected token `fi' [closed]Bash - 意外令牌'fi' [关闭]
【发布时间】:2015-11-14 22:02:09
【问题描述】:

在 IF 语句中比较两个字符串时遇到问题。

if [ $users -eq $usersFinal ] ; than 
    echo "Well done!"
fi

我收到一个意外的令牌“fi”错误,并且真的看不出语法有什么问题。

【问题讨论】:

  • 那么你就不需要了。
  • 谢谢大家(我感觉很糟糕),但这不是唯一的问题
  • @TranceFusion:还有什么问题?
  • 还是同样的错误
  • 在 if 后面还有 else if 或 else 语句吗,因为如果你做了 fi 需要放在所有语句的末尾

标签: linux bash terminal


【解决方案1】:

你仍然缺少一个 ;在你的一个班轮中。

users=9
usersFinal=9

if [ "$users" -eq "$usersFinal" ];then 
    echo "Bravoidididid!"
fi

你的单线:

users=9;usersFinal=9;if [ "$users" -eq "$usersFinal" ] ; then echo "Bravoidididid!" fi

缺少最后一个;

users=9;usersFinal=9;if [ "$users" -eq "$usersFinal" ] ; then echo "Bravoidididid!"; fi

我假设 users 和 usersFinal 是整数,而不是字符串。

对于oneliner, ;在 if 测试之后(在 then 之前),在 fi 之前。

如果 users / usersFinal 是字符串,使用 ==

users='fred';usersFinal='fred';if [ "$users" == "$usersFinal" ] ; then echo "Bravoidididid!"; fi

users='fred george'
usersFinal='fred george'

if [ "$users" == "$usersFinal" ];then 
    echo "Bravoidididid!"
fi

请注意,在字符串中引用变量在这里变得很重要。使用单括号时,如果其中一个变量为空,则有必要避免错误。

http://tldp.org/LDP/abs/html/comparison-ops.html

-gt、-lt、-eq、-le、-ge 是整数比较运算符。

请注意,您将看到带有 "$x" = "$y" 的示例,即单个 =,但我发现它更加清晰易读,并且始终使用 == 进行字符串比较Bash(还要注意 = 和 == 与 [[ ]] 的细微差别)。

当您使用 > 和 -gt 时,请特别注意该页面。记住它的简单方法:[[ $a > $b ]] 但是 [ "$a" -gt "$b" ](单括号和双括号)。

【讨论】:

  • 在上一篇文章中我评论说 users 和 usersFinal 是字符串,那么有什么不同吗?
猜你喜欢
  • 2013-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
  • 2014-08-20
  • 2018-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多