Программы
10 хороших примеров работы в Linux, FreeBSD и прочих Unix. Часть 3 — управляющие операторы

10 хороших примеров работы в Linux, FreeBSD и прочих Unix. Часть 3 — управляющие операторы

Это заметка из цикла вольных переводов (возможно, слишком вольных) статьи IBM «Learn 10 good Unix usage habits». Вольные они не только потому, что автор плох в английском, но и из-за спорного их содержания.

Это заметка из цикла вольных переводов (возможно, слишком вольных) статьи IBM «Learn 10 good Unix usage habits». Вольные они не только потому, что автор плох в английском, но и из-за спорного их содержания. Поэтому давайте выправим акценты и разберёмся в интересных возможностях bash (*sh). Предыдущую заметку можно найти здесь.

3. Комбинируйте свои команды с управляющими операторами.

Возможно, вы знаете, что многие команды bash можно комбинировать. К примеру, чтобы выполнять команды одну за другой, можно использовать «;» между ними. Точка с запятой — управляющий оператор. Он позволяет выполнять операции одну за другой в большинстве случаев. Но это далеко не единственный управляющий оператор. Многие другие мы рассмотрим ниже.

Всегда бесили таки «вступления-рекламы». Так, к примеру, в книге «Совершенный код» первые страниц 100 рекламируют остальные 500 страниц. А можно поберечь моё время и перейти к сути?

Используйте оператор «&&», чтобы комбинировать две команды, первая из которых должна завершиться 0-ым кодом возврата.

Вообще, формулировка была бы забавной, если бы не была печальной правдой. «Правильнее» было бы написать: чтобы выполнить 2-ую команду при правильно выполненной 1-ой, используйте «&&». Но суровая правда жизни глаголет о том, что многие разработчики возвращают «0», даже если что-то пошло не так. yum install bla-bla-bla… Поставились не все пакеты? Всё ок — сама же программа не упала! Stderr в stdout — вообще молчу. В общем, бывает, что «всё плохо».

Например:

~ $ cd tmp/a/b/c && tar xvf ~/archive.tar

— перейти в папку и разархивировать туда tar архив. Если же директории tmp/a/b/c нет, то и распаковывать никто ничего не будет.

Используйте оператор «||», чтобы комбинировать две команды, первая из которых должна завершиться не-0-ым кодом возврата.

В противопоставление оператору «&&» есть «||», который используется, чтобы обработать ситуацию, когда предыдущая команда завершилась с ошибкой. К примеру:

~ $ cd tmp/a/b/c || mkdir -p tmp/a/b/c

— если директории нет, создай её.

Тут, конечно, может быть проблема не в отсутствии директории, а, например, в отсутствии прав на переход по ней. Но для иллюстрации данный пример подойдёт.

Ну и, естественно, вы можете комбинировать сразу оба этих оператора в одной строке. Например, так:

~ $ cd tmp/a/b/c || mkdir -p tmp/a/b/c && tar xvf -C tmp/a/b/c ~/archive.tar

По сути, это:

  1. перейди в директорию,
  2. если не получилось — создай её,
  3. если получилось — пропускаем создание,
  4. если успешно перешли в директорию или успешно создали её — разархивируй в директорию архив.

Довольно запутанно, но зато в одну строчку…

Также добавлю, что после исполнения команды можно посмотреть, с каким статусом она исполнилась:

~ $ echo $?

$? — специальная переменная, в которой содержится код возврата последней выполненной программы.

В следующей заметке мы разберёмся с кавычками.

Изображение Шпаргалка по командам Linux, FreeBSD и MacOS