Quais são os passos deste comando usando; || e &&

2

Nota: A B C são comandos .....

Por favor, diga qual seria o processo de etapas desses comandos

A || B && C = 
A && B ; C = 

O que eu realmente procuro é algo assim (mas gostaria de entender os passos acima):

Se A falhar, execute B, mas se A for bem-sucedido, execute C (Como posso fazer isso com "||" ";" e / ou "& amp; & amp;"?)

Encontrei informações deste link, mas ele mostra apenas as etapas de 2 comandos, e não 3 .... Qual é o melhor: usando ; ou & amp; & amp; executar múltiplos comandos em uma linha?

    
por R0tten 05.06.2015 / 19:47

1 resposta

3

Linguisticamente, você pode pensar em statement1 && statement2 dizendo: "execute statement1 , e se o status de saída for 0, execute statement2 ." A outra sintaxe statement1 || statement2 por si só se traduz em "execute statement1 , e se o seu status de saída for não 0, execute statement2 ."

Esses operadores são destinados principalmente para uso em condições únicas de construções if. Mas eles também usam em outros lugares para compactar sintaxes confusas.

O ponto-e-vírgula, ; , é apenas o separador padrão de declarações do Bash (por exemplo, permite colocar duas instruções na mesma linha e executar a segunda imediatamente após a primeira, excluindo as circunstâncias irrelevantes para essa explicação). Qualquer declaração após o ponto-e-vírgula será interpretada no o resultado (verdadeiro / falso) do valor de retorno anterior.

  

Se A falhar, então execute B, mas se A for bem sucedido, então execute C (Como posso fazer   isso com "||" ";" e / ou "& amp; & amp;"?)

A && C || B

Vamos testar:

john@mypc:~/test$ ls
file-A.txt  file-B.txt  file-C.txt
john@mypc:~/test$ cat file-A.txt && cat file-C.txt || cat file-B.txt
file A content
file C content
john@mypc:~/test$ rm file-A.txt 
john@mypc:~/test$ ls
file-B.txt  file-C.txt
john@mypc:~/test$ cat file-A.txt && cat file-C.txt || cat file-B.txt
cat: file-A.txt: No such file or directory
file B content
john@mypc:~/test$

Como você pode ver, o conteúdo do arquivo B foi impresso apenas quando a impressão do arquivo A falhou. Antes de excluirmos o arquivo A, seu conteúdo foi impresso com êxito e somente o conteúdo do arquivo C foi impresso posteriormente.

Por outro lado, ; símbolos são agnósticos do código de retorno anterior. Por exemplo, considerando três comandos X, Y, Z, X && Y && Z não executará a instrução Z se Y (ou X) retornar um código de saída diferente de zero, enquanto (para todas as intenções e finalidades) X ; Y ; Z executará todos os três independentes dos códigos de saída do comando X e Y.

    
por John E 05.06.2015 / 21:09