使用多个if语句和if语句之间有什么区别吗?

时间:2011-01-08 21:16:13

标签: shell if-statement

这个问题专门针对shell脚本,但可能与任何编程语言有关。

在shell脚本中使用多个if语句和使用elif语句之间有什么区别吗?并且,case声明在我的情况下不起作用。

4 个答案:

答案 0 :(得分:50)

是的,可能。考虑一下(C#,Java,等等):

int x = GetValueFromSomewhere();

if (x == 0)
{
    // Something
    x = 1;
}
else if (x == 1)
{
    // Something else...
}

vs this:

int x = GetValueFromSomewhere();

if (x == 0)
{
    // Something
    x = 1;
}
if (x == 1)
{
    // Something else...
}

在第一种情况下,只会出现一个的“Something”或“Something else ...”。在第二种情况下,第一个块的副作用使第二个块中的条件成立。

然后再举一个例子,条件可能不是互相排斥的:

int x = ...;

if (x < 10)
{
    ...
} 
else if (x < 100)
{
    ...
}
else if (x < 1000)
{
    ...
}

如果你在这里摆脱“其他”,那么只要一个条件匹配,其余条件也会匹配。

答案 1 :(得分:10)

这与效率和需求有关。如果陈述是彼此独立执行的。每个人都会跑。否则if语句仅在前一个if失败时执行。

答案 2 :(得分:7)

if (x == 0) {
    // 1
}


if (x >= 0) {
    // 2
}

if (x <= 0) {
    // 3
}

以上代码将生成与x=0下面的代码不同的值。

if (x == 0) {
    // 1
} else if (x >= 0) {
    // 2
} else {
   // 3
}

在第一种情况下,将1执行所有语句23x = 0。在第二种情况下,只有1语句。

答案 3 :(得分:4)

如果有多个if语句,则每个语句都单独计算,如果条件合适,则可能会执行所有语句中的代码。如果你有if / elif语句,那么只有在评估第一个条件的特定结果后才会评估第二个条件。

考虑这个伪代码:

If (cond A) { action 1}
If (cond B) { action 2}

如果cond A和cond B都为真,则两个动作都将执行。

另一方面,这个伪代码:

If (cond A) {action 1}
Elif (cond B) {action 2}

无论两种情况如何评估,都只会执行两种方法中的一种(或两种方式)。