¿Cuál es el propósito de tener una expresión booleana que contenga un código de salida en este script de shell?

¿Cuál es el propósito de tener una expresión booleana que contenga un código de salida en este script de shell?

Tengo un problema que se resuelve con esta respuesta.https://superuser.com/a/508761

Ahora necesito ampliarlo para hacer otras cosas, pero primero necesito entender mejor cómo funciona antes de modificarlo. Aquí está el guión en cuestión:

#!/bin/bash

(( $# != 2 )) && exit 1

for f in *; do
  newf="${f//$1/$2}"
  if [[ $f != $newf ]]; then
    mv "$f" "$newf"
  fi
done

¿Que es lo que (( $# != 2 )) && exit 1hace? Tuve poca suerte para encontrar explicaciones en línea: descubrí qué es cada componente pero no qué hace la línea completa en el script en su conjunto. La respuesta no explicaba esa línea. El póster estuvo en línea por última vez hace más de 2 años y no quería responder a una pregunta de hace 5 años, así que aquí estoy.

Respuesta1

Es un operador de control.

Dehombre bash:

Los operadores de control && y || denotan listas Y y listas O, respectivamente.
 Una lista AND tiene la forma 
comando1 && comando2
comando2 se ejecuta si, y sólo si, comando1 devuelve un estado de salida de cero. [..cortar..] El estado de retorno de las listas AND y OR es el estado de salida del último comando ejecutado en la lista.
Aoperador de controles
    Un token que realiza una función de control. Es uno de los siguientes símbolos:
        || &&&; ;; ( ) |
 

(créditos)

Entonces, en este caso, no lo lea &&como un operador booleano. Ahora ya sabe cuándo exit 1se ejecuta, solo si el comando anterior se ejecuta correctamente (si el estado de salida era cero).

Mira estorespuesta de error del servidorparaexplicación de &&en 3 contextos diferentes en Bash.Útil para aprender distinciones entre ellos.

Respuesta2

Sale del script en esa línea si no se pasaron exactamente dos argumentos al script.

  • $#es el número de argumentos pasados ​​al llamar al script, análogo a argcen C

  • (( $# != 2 ))devuelve con un código verdadero ( 0) si el número de argumentos no es igual a2

  • &&ejecuta el lado derecho solo si el lado izquierdo salió con un código verdadero. Lo que significa que se ejecuta el lado derecho si el número de argumentos no es 2.

  • exit 1sale del script con el código de salida falso de 1. Esto cancela el script en este punto e informa a la persona que llama que hubo un error.

información relacionada