Valor de se os resultados do comando

1

Sou bem novo no Ubuntu linux, digamos todo o Linux porque o instalei alguns dias atrás. Sinto muito pelos meus erros no uso do inglês, porque moro na Holanda.

Bem, tentei fazer alguma programação, escrever um script, mas encontrei um problema que ainda não consegui resolver. Bem, eu estava escrevendo um script e quero que esse script instale automaticamente algumas coisas para mim. Bem, eu estava fazendo e tentei fazer menos ninhos que pude, e terminei meu roteiro, mas pensei. Por que eu não tentaria colocar algumas linhas nele para verificar se os programas estão instalados corretamente? Então eu me perguntei como eu poderia fazer isso e eu fiz o seguinte:

Como sou novo em programação, queria que fosse tão avançado quanto pudesse sozinho. Então eu decidi tentar trabalhar com funções de shell. Essas funções verificam se o arquivo correto está lá e o resultado dessas funções tem que ser um valor que eu possa usar depois. Aqui um exemplo:

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

Neste exemplo são true e false meus valores e, como você vê, eu tento reutilizá-los no meu segundo comando. Eu sei que isso pode ser feito muito mais facilmente, mas eu quero saber se é possível, e se é possível como. Porque em uma parte do meu roteiro fazer isso torna muito mais fácil. Existe alguma maneira de você atribuir um valor ao seu comando if e usar esse valor posteriormente no seu próximo comando if? Obrigado.

    
por user274595 26.04.2014 / 17:55

3 respostas

0

Existem muitas maneiras de fazer isso.

  1. Use os recursos internos do shell. Comandos (e funções) possuem valores de saída. Normalmente, um valor de saída de 0 significa que o comando foi bem-sucedido e um valor > 0 significa que falhou. Isso é verificado pelo shell quando você usa os operadores || ou && . Então, para rodar um comando apenas se o anterior foi bem sucedido, você usaria && , ro rodaria ele a menos que o anterior fosse bem sucedido, você usa || . Por exemplo:

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

    Se você usar um comando que não existe, obviamente falhará:

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

    Observe que a segunda mensagem não é impressa. Se você usa || :

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

    Você pode combinar isso na sua função de shell:

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

    O operador test (também conhecido como [ ] ) retorna um valor de saída de 0 em sucesso e 1 em falha. Isso significa que sua função pode ser simplificada para o acima.

  2. Use o comando return . Isso é exatamente o mesmo que o exemplo acima, estou simplesmente declarando isso mais explicitamente. Ele também permite que você retorne valores mais complexos para diferentes casos de falha.

    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
    

    Eu usei a mesma sintaxe que você para ilustrar, mas isso pode ser encurtado para

    isitthere && echo "Your program is properly installed" || echo "Your program isn't properly installed."
    
  3. Faça sua função imprimir algo na saída padrão e aja de acordo.

    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
    

    Neste exemplo, estamos usando a saída padrão da função e não seu valor de retorno. Para capturar a saída de um comando (ou função), você precisa usar substituição de comando . Isso permite que você execute um comando e salve a saída como uma variável. Por exemplo

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

    Assim, o teste if [ $(isitthere) = "yes" ] verifica se a saída da função foi yes e age de acordo.

Observe que usei [ -f thefile ] && echo yes || echo no e o mais complexo

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

Os dois são basicamente equivalentes, eu usei os dois apenas para ilustrar isso. Você pode usar o que preferir.

    
por terdon 27.04.2014 / 14:04
2

Mantenha a simplicidade; isso funciona bem (testado no 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
    
por Ruud Helderman 26.04.2014 / 18:40
0

Bem-vindo holandês companheiro!

Você poderia usar algo assim:

result=isitthere

Aqui você atribui o valor de retorno de sua função isitthere à variável result . Esta variável agora contém, neste caso, true ou false . Você sempre pode recuperar o valor de result usando $result .

No entanto, se você quiser pegar a saída (STDOUT) da sua função (por exemplo, se você usa echo dentro da sua função) você deve usar:

result=$(isitthere)
    
por Louis Matthijssen 26.04.2014 / 18:06