Qual é o propósito de ter uma expressão booleana contendo um código de saída neste script de shell?

Qual é o propósito de ter uma expressão booleana contendo um código de saída neste script de shell?

Eu tenho um problema que é resolvido com esta respostahttps://superuser.com/a/508761

Agora preciso expandi-lo para fazer outras coisas, mas primeiro preciso entender melhor como funciona antes de modificá-lo. Aqui está o script em questão:

#!/bin/bash

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

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

O que (( $# != 2 )) && exit 1faz? Tive pouca sorte em encontrar explicações on-line: descobri o que é cada componente, mas não o que a linha inteira faz no script como um todo. A resposta não explicou essa linha. O pôster esteve online pela última vez há mais de 2 anos e eu não queria revelar uma pergunta de 5 anos, então aqui estou.

Responder1

É um operador de controle

Debater cara:

Os operadores de controle && e || denotam listas AND e listas OR, respectivamente.
 Uma lista AND tem o formato 
command1 && command2
command2 é executado se, e somente se, command1 retornar um status de saída zero. [..corte..] O status de retorno das listas AND e OR é o status de saída do último comando executado na lista.
Aoperador de controleé
    Um token que executa uma função de controle. É um dos seguintes símbolos:
        || & && ; ;; ( ) |
 

(créditos)

Portanto, neste caso, não leia &&como um operador booleano. Então agora você sabe quando exit 1é executado – somente em caso de sucesso do comando anterior (se o status de saída for zero).

Veja issoresposta de falha no servidorparaexplicação de &&em 3 contextos diferentes no Bash.Útil para aprender distinções entre eles.

Responder2

Ele sai do script nessa linha se não houver exatamente dois argumentos passados ​​para o script.

  • $#é o número de argumentos passados ​​ao chamar o script, análogo ao argcC

  • (( $# != 2 ))retorna com um código truey ( 0) se o número de argumentos não for igual a2

  • &&executa o lado direito somente se o lado esquerdo sair com um código verdadeiro. O que significa que o lado direito será executado se o número de argumentos não for 2.

  • exit 1sai do script com o código de saída falsey de 1. Isso anula o script neste momento e informa ao chamador que houve um erro.

informação relacionada