Программы
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 $?

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

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

Также может быть вам интересно:

10 хороших примеров работы в Linux, FreeBSD и прочих Unix. Часть 2 — tar

Это продолжение цикла заметок о том, как можно использовать командную оболочку Linux более эффективно/интересно. Используйте эти советы на свой страх и риск — не каждый ваш коллега их оценит.

Читать »

10 хороших примеров работы в Linux, FreeBSD и прочих Unix. Часть 4 — кавычки

Это четвёртая часть пересказа статьи «Learn 10 good UNIX usage habits» от IBM. Предыдущую часть можете найти здесь.

Читать »
Фото Так ли безопасен Linux? Несколько коммитов с уязвимосятми в stable

Так ли безопасен Linux? Несколько коммитов с уязвимосятми в stable

Исследователи сумели пройти code-review с реквестами в ядро Linux, заведомо содержащими добавление уязвимостей.

Фото Пример своей консольной команды в Django проекте

Пример своей консольной команды в Django проекте

Если вы работали с Django проектом, то, скорее всего, запускали команды из консоли (manage.py). В Django есть простой способ писать свои команды для управления проектом.

Фото Как на Bash посчитать число строк в проекте (директории)

Как на Bash посчитать число строк в проекте (директории)

Ниже будет представлен однострочник, решающий данную задачу на Bash + пошаговое описание его работы.

Фото И снова sudo, и снова "решето"

И снова sudo, и снова "решето"

В утилите sudo была исправлена очередная уязвимость.

Фото Как установить часовой пояс в Linux

Как установить часовой пояс в Linux

В рамках первичной настройки Операционной Системы важно установить и по какому времени вы живёте, ведь при следующем обновлении времени через Интернет ваше время слетит.

Фото Как найти самые большие папки и файлы в Linux

Как найти самые большие папки и файлы в Linux

Когда кончается место на жестком диске, возникает закономерный вопрос: на что же оно было потрачено, какие файлы разрослись больше положенного?

Фото Команда grep – полезные ключи и примеры использования

Команда grep – полезные ключи и примеры использования

У команды "grep" довольно много различных особенностей. особенно, если учесть, что с английского это "решето" – а что может войти в решето , не факт что выйдет!

Фото Как создать неизменяемый файл в Linux / MacOS / FreeBSD

Как создать неизменяемый файл в Linux / MacOS / FreeBSD

Само собой, root может всё (если введёт пару команд), однако, это вполне легальный способ запретить изменение файла.