if 命令结果的值

if 命令结果的值

我对 Ubuntu Linux 还很陌生,可以说对整个 Linux 都陌生,因为我几天前才安装它。我很抱歉我的英语使用有误,因为我住在荷兰。

我尝试进行一些编程,编写一个脚本,但遇到了一个我至今无法解决的问题。我正在编写一个脚本,我希望这个脚本能自动为我安装一些东西。我尝试尽可能少地嵌套,并完成了我的脚本,但我想。我为什么不尝试在其中添加几行来检查程序是否正确安装。所以我想知道我该怎么做,我想到了以下方法:

因为我是编程新手,所以我希望编程尽可能先进。所以我决定尝试使用 shell 函数。这些函数检查是否存在正确的文件,并且这些函数的结果必须是我以后可以使用的值。下面是一个例子:

function isitthere
{
if [ -f <thefile> ]; then
true
else
false
fi
}

if [ $(isitthere) = "true" ]; then
echo "Your program is properly installed"
else
echo "Your program isn't properly installed.
fi

在这个例子中,我的值是 true 和 false,正如您所见,我尝试在第二个命令中重新使用它们。我知道这可以更轻松地完成,但我想知道这是否可行,以及如果可行,如何做。因为在我的脚本的一部分中,这样做会更容易。您是否有办法为 if 命令赋值,并在下一个 if 命令中使用该值?谢谢。

答案1

保持简单;这可以正常工作(在 Ubuntu 12.04 中测试):

#!/bin/bash

function isitthere
{
    [ -f TheFile ]
}

if isitthere; then
    echo "Your program is properly installed."
else
    echo "Your program isn't properly installed."
fi

答案2

有很多方法可以做到这一点。

  1. 使用 shell 的内置功能。命令(和函数)有退出值。通常,退出值为 0 表示命令成功,值 > 0 表示命令失败。使用||&&运算符时,shell 会检查这一点。因此,如果要仅在前一个命令成功时运行命令,您可以使用&&, 来运行它除非上一步成功后,您可以使用||。例如:

    $ foo
    The last command was succesful
    echo 'foo' && echo "The last command was succesful"
    

    如果你使用不存在的命令,它显然会失败:

     $ echooo 'foo' && echo "The last command was succesful"
     echooo: command not found
    

    请注意,第二条消息不会被打印。如果您改用||

    $ echooo 'foo' || echo "The last command failed"
    echooo: command not found
    The last command failed
    

    你可以将它们组合到你的 shell 函数中:

    function isitthere
    {
        [ -f thefile ]
    }
    
    isitthere && echo "The file exists" || echo "the file does not exist"
    

    运算test符(也称为[ ])在成功时返回退出值 0,在失败时返回 1。这意味着您的函数可以简化为上述内容。

  2. 使用return命令。这实际上与上面的例子完全相同,我只是更明确地说明。它还允许您针对不同的失败情况返回更复杂的值。

    function isitthere
    {
        if [ -f <thefile> ]; then
            return 0
        else
            return 1
        fi
    }
    
    if [ $(isitthere) ]; then
        echo "Your program is properly installed"
    else
        echo "Your program isn't properly installed.
    fi
    

    我使用了与你相同的语法来说明,但可以缩短为

    isitthere && echo "Your program is properly installed" || echo "Your program isn't properly installed."
    
  3. 让你的函数打印一些内容到标准输出,然后采取相应的行动。

    function isitthere
    {
        [ -f thefile ] && echo yes || echo no
    }
    
    if [ $(isitthere) = "yes" ];
    then
        echo "Your program is properly installed"
    else
        echo "Your program isn't properly installed."
    fi
    

    在此示例中,我们使用函数的标准输出,而不是其返回值。要捕获命令(或函数)的输出,您需要使用命令替换。这允许您运行命令并将输出保存为变量。例如

    $ foo=$(echo bar)
    $ echo $foo
    bar
    

    因此,测试if [ $(isitthere) = "yes" ]检查输出的功能yes并采取相应的行动。


请注意,我使用了两者[ -f thefile ] && echo yes || echo no,以及更复杂的

if [ -f <thefile> ]; then
    return 0
else
    return 1
fi

两者基本相同,我使用两者只是为了说明这一点。你可以使用你喜欢的任何一个。

答案3

欢迎荷兰同胞!

你可以使用这样的方法:

result=isitthere

在这里,您将函数的返回值分配isitthere给变量result。在本例中,此变量现在包含true或。您可以随时使用false检索值。result$result

但是,如果您想捕获函数的输出(STDOUT)(例如,如果您echo在函数内部使用),您应该使用:

result=$(isitthere)

相关内容