2

我在下面编写了以下 PowerShell 脚本:

if ($Animal -eq "Chicken") {
    if ($Food -eq "Egg") {
        Write-Host "This chicken eats egg"
    } ElseIf ($Food -eq "Soup") {
        Write-Host "This chicken eats soup"
} ElseIf ($Animal -eq "Cow") {
    if ($Food -eq "Egg") {
        Write-Host "This cow eats egg"
    } ElseIf ($Food -eq "Soup") {
        Write-Host "This cow eats soup"
} ElseIf ($Animal -eq "Zebra") {
    if ($Food -eq "Egg") {
        Write-Host "This zebra eats egg"
    } ElseIf ($Food -eq "Soup") {
        Write-Host "This zebra eats soup"

该脚本适用于鸡和牛,但不注册代码的斑马部分。我不确定我做错了什么,因为没有返回错误。有人可以提供一些指导吗?

4

3 回答 3

3

虽然我完全同意 Doug 的回答,但我完全不知道您为什么首先使用 if 语句。如果这是一个学习练习,我建议使用如下 switch 语句:

$Animal = "Zebra"
$Food = "Soup"
$output = ""

switch ($Animal){
    "Chicken" { $output = "This $($Animal) eat $($Food)"; break}
    "Cow" { $output = "This $($Animal) eat $($Food)"; break }
    "Zebra" { $output = "This $($Animal) eat $($Food)"; break }
}

Write-Output $output

或者只是输出值而不进行不必要的检查:

$Animal = "Zebra"
$Food = "Soup"

Write-Output "This $($Animal) eat $($Food)"
于 2019-08-30T15:07:41.170 回答
2

您缺少s}之后ElseIf的内容。

更正的代码:

if ($Animal -eq "Chicken") {
    if ($Food -eq "Egg") {
        Write-Host "This chicken eats egg"
    } ElseIf ($Food -eq "Soup") {
        Write-Host "This chicken eats soup"
    }
} ElseIf ($Animal -eq "Cow") {
    if ($Food -eq "Egg") {
        Write-Host "This cow eats egg"
    } ElseIf ($Food -eq "Soup") {
        Write-Host "This cow eats soup"
    }
} ElseIf ($Animal -eq "Zebra") {
    if ($Food -eq "Egg") {
        Write-Host "This zebra eats egg"
    } ElseIf ($Food -eq "Soup") {
        Write-Host "This zebra eats soup"
    }
}

更好的方法

也就是说,正如@MathiasR.Jessen 指出的那样,这可以使用变量扩展来简化:

Write-Host "This $($Animal.ToLower()) eats $($Food.ToLower())"

有关更多信息,请参阅关于引用规则

于 2019-08-30T15:03:45.567 回答
1

道格是对的,你错过了一些}

我已经为你重新格式化了。我发现这种格式有助于捕捉这样的错误......

if ($Animal -eq "Chicken") 
{
    if ($Food -eq "Egg") 
    {
        Write-Host "This chicken eats egg"
    } 
    ElseIf ($Food -eq "Soup") 
    {
        Write-Host "This chicken eats soup"
    }
}
ElseIf ($Animal -eq "Cow") 
{
    if ($Food -eq "Egg")
    {
        Write-Host "This cow eats egg"
    }
    ElseIf ($Food -eq "Soup")
    {    
        Write-Host "This cow eats soup"
    }
} 
ElseIf ($Animal -eq "Zebra") 
{
    if ($Food -eq "Egg")
    {
        Write-Host "This zebra eats egg"
    } 
    ElseIf ($Food -eq "Soup") 
    {
        Write-Host "This zebra eats soup"
    }
}
于 2019-08-30T15:06:35.877 回答