script programacion español ejemplos comandos basicos bash shell command-line syntax

bash - español - programacion shell linux pdf



¿Cuál es el propósito de "&&" en un comando de shell? (8)

línea de comandos - ¿cuál es el propósito de && ?

En cáscara, cuando ves

$ command one && command two

la intención es ejecutar el comando que sigue a && solo si el primer comando es exitoso. Esto es idiomático de las conchas de Posix, y no solo se encuentra en Bash.

Pretende evitar la ejecución del segundo proceso si el primero falla.

Los procesos devuelven 0 para verdadero, otros números positivos para falso

Los programas devuelven una signal al salir. Deberían devolver 0 si salen con éxito, o más que cero si no lo hacen. Esto permite una cantidad limitada de comunicación entre procesos.

El && se conoce como AND_IF en la gramática de shell de posix , que es parte de una lista de comandos and_or , que también incluye el || que es un OR_IF con semántica similar.

Símbolos de gramática:

%token AND_IF OR_IF DSEMI /* ''&&'' ''||'' '';;'' */

Gramática:

and_or : pipeline | and_or AND_IF linebreak pipeline | and_or OR_IF linebreak pipeline

Ambos operadores tienen la misma prioridad y se evalúan de izquierda a derecha (se asocian con la izquierda). Por ejemplo, lo siguiente:

$ false && echo foo || echo bar $ true || echo foo && echo bar

Ambos ecos solo bar .

  1. En el primer caso, el falso es un comando que sale con el estado de 1

    $ false $ echo $? 1

    lo que significa que echo foo no se ejecuta (es decir, shortcircuiting echo foo ). Luego se ejecuta el comando echo bar .

  2. En el segundo caso, true sale con un código de 0

    $ true $ echo $? 0

    y, por lo tanto, no se ejecuta echo foo , entonces se ejecuta la echo bar .

Que yo sepa, usar & después del comando es para ejecutarlo en segundo plano.

Ejemplo de & uso: tar -czf file.tar.gz dirname &

Pero ¿qué hay de && ? (mira este ejemplo: https://serverfault.com/questions/215179/centos-100-disk-full-how-to-remove-log-files-history-etc#answer-215188 )


Además, también tienes || cual es la lógica o, y también ; que es solo un separador al que no le importa lo que haya pasado antes con el comando.

$ false || echo "Oops, fail" Oops, fail $ true || echo "Will not be printed" $ $ true && echo "Things went well" Things went well $ false ; echo "This will always run" This will always run

Puede encontrar algunos detalles sobre esto aquí Listas de comandos en el Manual de Bash.


Es para ejecutar una segunda instrucción si la primera instrucción termina con éxito. Como una declaración if:

if (1 == 1 && 2 == 2) echo "test;"

Su primer intento si 1 == 1, si eso es cierto, comprueba si 2 == 2


Un uso bastante común para ''&&'' es compilar software con autotools. Por ejemplo:

./configure --prefix=/usr && make && sudo make install

Básicamente, si la configuración tiene éxito, make se ejecuta para compilar, y si eso tiene éxito, make se ejecuta como root para instalar el programa. Uso esto cuando estoy casi seguro de que las cosas funcionarán, y me permite hacer otras cosas importantes como mirar el flujo de la pila y no "monitorear" el progreso.

A veces me dejo llevar ...

tar xf package.tar.gz && ( cd package; ./configure && make && sudo make install ) && rm package -rf

Hago esto cuando, por ejemplo, haciendo un linux desde cero.


Vea el ejemplo:

mkdir test && echo "Something" > test/file

Shell intentará crear una test directorio y luego, solo si tuvo éxito , intentará crear un archivo dentro de él.

Así que puedes interrumpir una secuencia de pasos si uno de ellos falla.


&& cuerdas de comandos juntos. Los comandos sucesivos solo se ejecutan si los anteriores tienen éxito.

Del mismo modo, || permitirá que el comando sucesivo se ejecute si el anterior falla.

Ver programación de shell Bash .


&& permite hacer algo en función de si el comando anterior se completó con éxito, es por eso que tiende a verlo encadenado como do_something && do_something_else_that_depended_on_something .


command_1 && command_2 : ejecuta command_2 solo cuando command_1 se ejecuta con éxito.

command_1 || command_2 command_1 || command_2 : ejecuta command_2 solo cuando command_1 no se ejecuta correctamente.

Se siente similar a cómo se ejecuta una condición ''if'' en un lenguaje de programación general, como, en if (condition_1 && condition_2){...} condition_2 se omitirá si condition_1 es false y en if (condition_1 || condition_2){...} condition_2 se omitirá si condition_1 es true . Mira, es el mismo truco que usas para codificar :)