O que faz || significa em bash? [duplicado]

5

Desculpas se este for um post duplicado. Eu tentei procurar para ver se alguém já perguntou / respondeu isso, mas não encontrou nada.

O que significa || no bash? Por exemplo, ao pesquisar etapas para solucionar um problema de driver, deparei com esse comando:

modprobe -q vmxnet3 && echo "vmxnet3 installed" || echo "vmxnet3 not installed"

Eu entendi que a primeira parte está consultando o modprobe e retornando uma resposta do "vmxnet3 installed" se ele receber um código de retorno bem-sucedido ... mas ... o que está fazendo na última parte?

    
por Mike B 16.03.2015 / 19:04

3 respostas

8

|| é o operador OR. Ele executa o comando à direita somente se o comando à esquerda retornar um erro. Consulte o link .

Eu acho que o seu exemplo não é correto bash embora. A parte à direita de || não possui o comando echo :

> true && echo "worked" || echo "didn't work"
worked
> false && echo "worked" || echo "didn't work"
didn't work
> false && echo "worked" || "didn't work"
bash: didn't work: command not found
    
por 16.03.2015 / 19:09
4

Esta é uma condição "OR".

Para um exemplo simplificado, vamos ver

 cmd1 || cmd2

O que acontece é que, se o cmd1 for bem-sucedido (ou seja, o código de saída 0), o cmd2 NÃO será executado. O cmd2 só será executado se o cmd1 falhar.

Esse é um dos motivos pelos quais o retorno dos códigos de saída é tão importante.

BTW, este recurso estava presente em shells UNIX muito antigos, pois não havia instruções IF no sh antigo. Isso, claro, foi antes mesmo de existir.

    
por 16.03.2015 / 19:07
2

Assim como && , || é um operador de controle bash :

  • && significa executar a instrução que segue somente se a instrução anterior for executada com êxito (código de saída zero retornado).

  • || significa executar a instrução que segue somente se a instrução anterior falhar (retornou um código de saída diferente de zero).

Alguns dos outros operadores de controle são:

  • & significa executar a instrução anterior em segundo plano.

  • ; significa executar a instrução anterior e, após a conclusão, seguir para a próxima instrução.

  • | significa executar a instrução anterior e conectar seu stdout ao stdin da instrução que segue.

Combinando && e ||

&& e || podem ser combinados para fazer uma alternativa para if-then-else. Considere:

if some_command
then
    echo yes
else
    echo no
fi

O texto acima é semelhante a:

some_command && echo yes || echo no

Eu disse "semelhante" em vez de idêntico porque os dois são diferentes no caso de o comando echo yes falhar. Se o comando echo yes falhar (sair com um código de retorno diferente de zero), o comando echo no será executado. Isso não aconteceria com a versão if-then-else-fi . O comando echo só falhará, no entanto, se houver um erro de gravação no terminal. Consequentemente, essa diferença raramente é importante e a forma && e || é frequentemente usada como um atalho.

    
por 16.03.2015 / 19:08

Tags