如何在if / else语句中将变量与文本字符串而不是整数进行比较?


24

在编写shell脚本的过程中,我遇到了以下if / else语句出现在脚本中间的问题:

if [ $act -eq "add" ]
then
    read - "add or update: " $comm
    git commit -m "$comm $file"
else
    git commit -m "$act $file"
fi

返回错误为:

./gitup: line 13: [: add: integer expression expected

然后继续执行脚本的其余部分。我如何让if段将变量评估/比较为字符串输入而不是整数;在我尝试过的其他几件事中,使用“!=”时需要一个不同的错误。

Answers:


38

像这样:

act="add"
if [[ $act = "add" ]]
then
    echo good
else
    echo not good
fi

-eq用于数字比较,=用于字符串比较


谢谢。我已经尝试过了,该脚本可以释放,需要击键,但只是发现它是由无关的语法错误引起的,因此可以很好地工作。谢谢您的帮助。
tony_perkis666

3
@josephmarhee:请注意,该[[]]测试是Bash特定的构造,并且此示例与[]问题中使用的POSIX 一样有效。如果解释器被明确指定为#!/bin/bash或类似的名称,则[[]]可以毫无问题地使用-(我相信它比Bash中的替代方法要快一些,我相信-仍然不应该成为瓶颈),否则应该坚持使用[]。如果根本不需要Bash细节,则该脚本在Dash等程序中的运行速度会更快。POSIX确保了固有的可移植性。
丹尼尔·安德森

4

这种方法也可以。与@Guru的答案非常相似,但不再需要使用双方括号。

if [ "$act" == "add" ]
then
echo "Good!"
      else
      echo "Not good!"
fi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.