Linux Shell Script if语句

时间:2014-08-26 04:05:58

标签: linux bash shell

我正在学习Linux Shell脚本并学习流程控制

我坚持使用这个简单的脚本:

#!/bin/bash
x=2

if [ $x=5 ]; then
        echo "x equals 5."
else
        echo "x does not equal 5."
fi

执行命令时,我在终端上得到的唯一响应是:x等于5.

有人可以帮我在我的代码中找到错误吗?

提前致谢。

4 个答案:

答案 0 :(得分:3)

$x=5是一个字符串,解释为"2=5",它不为零,因此是真的。

$x = 5是两个字符串,它们之间是字符串相等运算符,并且计算结果为false。

然而,这有点不安全,因为理论上$x可能是空的,在这种情况下你得到不合语法的测试= 5;安全变体是"$x" = 5

如果您需要比较数字,请使用-eq代替=。例如,05 = 5为false,但05 -eq 5为真。

答案 1 :(得分:1)

使用-eq而不是=

if [ $x -eq 5 ]; then
        ^^^

=是字符串运算符。 http://tldp.org/LDP/abs/html/comparison-ops.html

答案 2 :(得分:0)

请换行 if [ $x=5 ]; thenif [ $x = 5 ]; then

评估需要空格。

执行

$ sh sample.sh 
x does not equal 5.

答案 3 :(得分:0)

您首先需要找出您实际谈论的shell。如果你使用基本的POSIX shell(/ bin / sh)语法,那么if的基本形式是调用程序并评估它的返回代码。有一个特殊程序test,别名为[表达式。但是这个程序要求表达式的所有部分都是不同的参数,因此你必须在[,$ x,=和5之前和之后放置空格。