Какова цель наличия в этом скрипте оболочки логического выражения, содержащего код выхода?

Какова цель наличия в этом скрипте оболочки логического выражения, содержащего код выхода?

У меня есть проблема, которую решает этот ответ.https://superuser.com/a/508761

Теперь мне нужно расширить его, чтобы делать другие вещи, но сначала мне нужно лучше понять, как он работает, прежде чем его модифицировать. Вот скрипт, о котором идет речь:

#!/bin/bash

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

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

Что делает (( $# != 2 )) && exit 1? Мне не очень повезло найти объяснения в сети: я узнал, что представляет собой каждый компонент, но не то, что делает вся строка в сценарии в целом. Ответ не объяснял эту строку. Автор в последний раз был онлайн более 2 лет назад, и я не хотел некропостировать вопрос 5-летней давности, поэтому вот он.

решение1

Это оператор управления.

Отбаш человек:

Операторы управления && и || обозначают списки И и списки ИЛИ соответственно.
 Список AND имеет вид 
command1 && command2
command2 выполняется тогда и только тогда, когда command1 возвращает нулевой статус выхода. [..резать..] Статус возврата списков AND и OR — это статус выхода последней команды. выполнено в списке.
Аоператор управленияявляется
    Токен, выполняющий функцию управления. Это один из следующих символов:
        || & && ; ;; ( ) |
 

(кредиты)

Так что в этом случае не читайте &&как логический оператор. Так что теперь вы знаете, когда exit 1выполняется – только при успешном выполнении предыдущей команды (если статус выхода был нулевым).

Видеть этоserverfault ответдляобъяснение &&в 3 различных контекстах в Bash.Полезно для изучения различий между ними.

решение2

Он завершает работу скрипта на этой строке, если скрипту не было передано ровно два аргумента.

  • $#— это количество аргументов, переданных при вызове скрипта, аналогично argcв C

  • (( $# != 2 ))возвращает код truey ( 0), если количество аргументов не равно2

  • &&запускает правую часть только если левая часть завершилась с кодом truey. Это означает, что правая часть запускается, если число аргументов не равно 2.

  • exit 1завершает работу скрипта с кодом выхода falsey 1. Это прерывает выполнение скрипта в этой точке и информирует вызывающего об ошибке.

Связанный контент