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

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

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

Это заметка из цикла вольных переводов (возможно, слишком вольных) статьи 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 $?

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

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

Будь первым – оставь комментарий!

Фото 10 хороших примеров работы в Linux, FreeBSD и прочих Unix. Часть 2 — tar
Предыдущая запись:
10 хороших примеров работы в Linux, FreeBSD и прочих Unix. Часть 2 — tar
Фото 10 хороших примеров работы в Linux, FreeBSD и прочих Unix. Часть 4 — кавычки
Следующая запись:
10 хороших примеров работы в Linux, FreeBSD и прочих Unix. Часть 4 — кавычки