- Как определить статус завершения скрипта или команды в Linux
- Bash получить код завершения команды в Linux / Unix
- Что такое код вывода в оболочке bash?
- Как узнать код вывода команды
- Bash как получить код завершения команды – Как использовать коды вывода в скриптах оболочки
- Как мне установить код вывода для моих собственных скриптов оболочки?
- Пример скрипта оболочки для получения кода завершения команды
- Заключение
- Проверка условий в bash
- Скобки
- Конструкции простой проверки if|then|else
- Арифметика
- Вложение нескольких проверок
- Самые полезные приёмы работы в командной строке Linux
- Вывод результатов работы команд в виде таблицы
- Многократный повтор команды до её успешного завершения
- Сортировка процессов по используемой памяти
- Сортировка процессов по использованию ресурсов CPU
- Одновременный просмотр нескольких лог-файлов
- Возврат к предыдущей директории
- Мониторинг с регулярными интервалами
- Продолжение выполнения программы после окончания сессии
- Автоматический ответ yes или no
- Создание файла заданного размера
- Выполнение последней команды с root-привилегиями
- Создание протокола терминальной сессии
- Замена пробелов на знаки табуляции
- Замена строчных букв на прописные
- Автоматическое формирование списка аргументов для команд: xargs
- Итоги
Как определить статус завершения скрипта или команды в Linux
Хотите писать навороченные сценарии и стать экспертом в написании скриптов оболочки? Тогда этот пост для вас 😉
В Linux/Unix когда вы запускаете скрипт или команду, они завершатся со значимым статусом для того чтобы вы поняли — достигли ли вы своей цели запуская их или нет. Тем самым мы можем предпринять какие-то действия по статусу завершения (выполнено, провалено или выполнено частично) этих команд. В linux есть некоторые команды, которые не отображают статус завершения, например команда «mount -a» которую мы выполняем после правки файла fstab не покажет вам ничего. Так как же мы узнаем что команда отработала и на сколько успешно? Для этого в Linux/Unix есть встроенная переменная которая хранит статус завершения для любой команды или запущенного скрипта. Этот статус хранится во встроенной переменно «$?». Статус завершения принимает значение от 0 до 255. Некоторые из обычно используемых статусов завершения приведены ниже.
Несколько примеров того, как использовать статусы завершения.
Как можно использовать статус завершения для проверки команды? Запустите команду которую хотите проверить, затем выполните команду
для проверки статус выполнения команды.
Пример 1:
Если вы получили статус завершения равный нулю, то команды была выполнена успешно.
Как можно использовать статус завершения в сценариях оболочки?
Источник
Bash получить код завершения команды в Linux / Unix
Я новый пользователь системы Linux. Как мне получить код завершения команды?
Как получить код вывода или статус команды оболочки Linux или Unix и сохранить его в переменной оболочки?
Введение. Каждая команда оболочки Linux или Unix возвращает состояние, когда она завершается нормально или ненормально.
Например, если скрипт backup.sh не выполнен, и он возвращает код, который сообщает скрипту оболочки отправить электронное письмо админу.
Что такое код вывода в оболочке bash?
Каждая команда Linux или Unix, выполняемая скриптом оболочки или пользователем, имеет статус вывода.
Статус вывода – это целое число.
0 состояние выхода означает, что команда была успешной без каких-либо ошибок.
Ненулевое (1-255 значений) состояние выхода означает, что команда была неудачной.
Как узнать код вывода команды
Вам нужно использовать определенную переменную оболочки с именем $? чтобы получить статус вывода из ранее выполненной команды.
Выведем $? переменной используя команду echo или команду printf:
Из приведенных выше выводов ясно, что код вывода 0 означает, что команда date была успешной.
Кроме того, код вывода – 127 (не ноль), так как команда nonexistant не была успешной.
Bash как получить код завершения команды – Как использовать коды вывода в скриптах оболочки
Итак, как вы сохранить статус вывода команды в переменной оболочки?
Просто назначьте $? в переменную оболочки. Синтаксис:
Как мне установить код вывода для моих собственных скриптов оболочки?
Команда exit вызывает обычное завершение скриптов оболочки.
Вывод из оболочки со статусом N. Синтаксис:
Пример скрипта оболочки для получения кода завершения команды
Заключение
На этой странице показано, как использовать коды вывода в системах на основе Linux или Unix и как получить статус вывода / код команды.
Источник
Проверка условий в bash
Это немного подправленная выдержка из этой статьи .
Скобки
[ — является специальной встроенной командой test воспринимающей свои аргументы как выражение сравнения или файловую проверку […..].
[[ — расширенный вариант от «[«, является зарезервированным словом, а не командой, его bash выполняет как один элемент с кодом возврата. Внутри «[[….]]» разрешается выполнение операторов &&, || которые приводят к ошибке в обычных скобках «[….]» тем самым вариант с двойной скобкой более универсален.
(( — является арифметическими выражениями, которое так же возвращают код 0. Тем самым такие выражения могут участвовать в операциях сравнения.
Приведу список логических операторов, которые используются для if|then|else:
-z – строка пуста
-n – строка не пуста
=, ( == ) – строки равны
!= – строки неравны
-eq – равно
-ne – неравно
-lt,( ) – больше
-ge,(>=) — больше или равно
! — отрицание логического выражения
-a,(&&) – логическое «И»
-o,(||) -логическое «ИЛИ»
Конструкции простой проверки if|then
Другими словами:
если проверяемое_выражение_или_команды_верны; то выполняем команды закрываем если
Пример 1
Часто встречается в скриптах проверка — «существует ли файлы или каталоги» на их примере покажу работу
Пример 2
$HOME/.bashrc – путь до файла
echo – печатает сообщение в консоль
Пример 3
&& — логическое «и», если первый путь «истина» проверяем второй, если он тоже «истина», то выполняем команды (echo)
-f – ключ проверки на существования файла (о них чуть ниже)
Конструкции простой проверки if|then|else
если проверяемое_выражение_или_команды_верны; то команды 1 иначе команды 2 закрываем если
Пример 4
Возможно не лучший пример, нас интересует именно ответ 0 или 1. В результате печатается в консоль «Тест» и «0» потому что команда «echo Тест» успешна и это «истина».
Намерено допустите ошибку изменив echo, в результате получите «1» и сообщение о том что «команда echo не существует» и это «ложь».
Примеры «существуют ли файл?»
Пример 5
Если файл bashrc существует, то печатает в консоль «Файл существует!», иначе печатает «Файл не существует!»
Поиграйте с именем проверяемого файла
Пример 6
Ключи к файлам и каталогам
[ -ключ “путь” ]
[ -e “путь каталогу_или_файлу”] – существует ли файл или каталог.
[ -r “путь к файлу/каталогу”] – доступен ли файл/каталог для чтения.
[ -f “путь к файлу/каталогу”] – существует ли файл.
[ -d “путь к каталогу”] – существует ли каталог.
Полное описание возможных применений различных скобок, правильное расставление кавычек уходит далеко от темы, поэтому могу посоветовать обратится к руководству Advanced Bash Scripting
Арифметика
Пример 7
Если оператор > использовать внутри [[….]], он рассматривается как оператор сравнения строк, а не чисел. Поэтому операторам > и
Пример 8
Использование команды test, коей являются квадратные скобки. Если «3» меньше «6» печатаем «Да».
Можно использовать и двойные квадратные скобки, это расширенный вариант команды test, эквивалентом которой является «[ ]». Если «3» меньше «6» печатаем «Да».
Пример 9
Используем двойные квадратные скобки, потому что применяем оператор «&&». Если первое выражение 2 = 2 (истина) тогда выполняем второе, и если оно тоже 2=2 (истина), печатаем «Верно»
Если первое выражение 2 = 2 (истина) тогда выполняем второе, и если переменная «b» не равна двум (ложь), печатаем «Не верно»
Можно конечно сделать проще, нам главное понять принцип if|then и else, не стесняйтесь менять, подставляя свои значения.
Вложение нескольких проверок
Bash позволяет вкладывать в блок несколько блоков
Построения многоярусных конструкций
Для построения многоярусных конструкции, когда необходимо выполнять множество проверок лучше использовать elif — это краткая форма записи конструкции else if.
Источник
Самые полезные приёмы работы в командной строке Linux
Каждый, кто пользуется командной строкой Linux, встречался со списками полезных советов. Каждый знает, что повседневные дела вполне можно выполнять эффективнее, да только вот одно лишь это знание, не подкреплённое практикой, никому не приносит пользы.
Как выглядят типичные трудовые будни системного администратора, который сидит на Linux? Если абстрагироваться от всего, кроме набираемых на клавиатуре команд, то окажется, что команды эти постоянно повторяются. Всё выходит на уровень автоматизма. И, если даже в работе есть что улучшать, привычка противится новому. Как результат, немало времени уходит на то, чтобы делать так, как привычнее, а не так, как быстрее, и, после небольшого периода привыкания – удобнее. Помнить об этом, сознательно вводить в собственную практику новые полезные мелочи – значит профессионально расти и развиваться, значит – экономить время, которое можно много на что потратить.
Вывод результатов работы команд в виде таблицы
Иногда вывод результатов работы команд выглядит как мешанина из беспорядочных строк. Найти то, что надо, в таких данных можно, но работать с ними неудобно. Например – что-то подобное можно получить в ответ на команду mount . Хорошо бы то же самое вывести в виде таблицы. И это не только возможно, но ещё и очень просто:
Результаты работы команды mount, оформленные в виде таблицы
По умолчанию команда формирует табличное представление, ориентируясь на пробелы между словами. А что, если в качестве разделителей используются другие символы, вроде двоеточий? Например – в выводе cat /etc/passwd ?
Упорядочить можно и такие данные – достаточно указать символ-разделитель с параметром –s . Например, ниже приведена команда для символа «:».
Отформатированный вывод /etc/passwd
Многократный повтор команды до её успешного завершения
Если вы погуглите на эту тему, то обнаружите, что многие задают вопрос о том, как повторять команду до тех пор, пока она не будет успешно выполнена. Например, такое может быть полезным при пинге сервера до тех пор, пока он не откликнется, при проверке выгрузки файлов, или при опросе некоего URL до тех пор, пока он не окажется доступен.
Решить подобную задачу поможет цикл while true . Выглядит всё это так:
Команда будет повторяться до её успешного завершения
В этом примере конструкция >/dev/null 2>&1 перенаправляет вывод программы в /dev/null , включая и Standard Error, и Standard Out.
Вероятнее всего, это – один из самых полезных приёмов работы с командной строкой Linux.
Сортировка процессов по используемой памяти
Отсортированный список процессов
Сортировка процессов по использованию ресурсов CPU
Сортировка процессов по использованию CPU делается так:
Отсортированный список процессов
Для того, чтобы вывести сведения об архитектуре, используйте команду getconf LONG_BIT .
Одновременный просмотр нескольких лог-файлов
Для просмотра лог-файлов вполне подходит команда tail , но иногда может понадобиться одновременная работа с несколькими подобными файлами. Для решения этой задачи подойдёт консольный инструмент multitail , который поддерживает выделение текста, фильтрацию и многие другие полезные возможности.
Работа с multitail
Установить эту утилиту, если вы её у себя не найдёте, можно командой apt-get install multitail .
Возврат к предыдущей директории
Для того, чтобы вернуться к предыдущей директории, просто наберите cd –.
Мониторинг с регулярными интервалами
Использование утилиты watch (например, watch df –h ) поможет организовать наблюдение за выводом любой команды. Например, можно наблюдать за объёмом свободного пространства, и за тем, как он меняется.
Пожалуй, вы сами сможете найти подходящие сценарии для использования этой команды.
Продолжение выполнения программы после окончания сессии
Когда вы запускаете любую программу в фоне и закрываете консоль, программа тоже завершит работу. А что, если надо, чтобы программа работала и после закрытия оболочки?
Для того, чтобы этого добиться, можно воспользоваться командой nohup , название которой расшифровывается как «no hang-up». Выглядит это так:
Пожалуй, эта команда – одна из тех, о которой забывают чаще всего, открывая по несколько окон терминала только ради исполняющихся в них команд.
Команда nohup
В примере, показанном на рисунке выше, в текущей директории будет создан файл nohup.out , содержащий вывод команды:
Файл nohup.out
Полезная штука, согласны?
Автоматический ответ yes или no
Предположим, вы хотите автоматизировать процесс, который требует от пользователя постоянно отвечать yes . Сделать это можно, используя команду yes :
Возможно, вместо этого вы решите автоматизировать отрицательные ответы. Тут поможет такая конструкция:
Автоматизация ответа YES
Создание файла заданного размера
Создавать файлы заданного размера можно, используя команду dd :
Вышеприведённая команда создаст файл размером 10 Мб, заполненный нулями.
Создание файла заданного размера
Выполнение последней команды с root-привилегиями
Иногда можно забыть ввести sudo перед командой, которой нужны root-привилегии. Вводить всё заново нет нужды – достаточно воспользоваться такой командой:
Выполнение последней команды с root-привилегиями
Создание протокола терминальной сессии
Для того, чтобы записать в файл всё, что было выведено в окне терминала, можно воспользоваться командой script .
После выхода из сессии протокол будет записан в файл typescript .
Замена пробелов на знаки табуляции
Вот команда, которая позволяет заменить пробелы на знаки табуляции:
На самом деле, она универсальна и умеет работать с любыми символами.
Замена строчных букв на прописные
А вот – пример вышеописанной команды для замены строчных букв в файле с текстом на прописные:
Замена строчных букв в файле на прописные
Автоматическое формирование списка аргументов для команд: xargs
Утилита xargs , пожалуй, достойна звания одной из самых полезных возможностей командной строки Linux. Её можно использовать для передачи вывода некоей команды в качестве аргумента для другой. Например, вот как можно выполнить поиск .png-файлов и сжать их, или сделать с ними что-нибудь ещё:
Или, возможно, у вас имеется файл со списком URL, и вы хотите загрузить ресурсы по этим адресам, или ещё как-то их обработать:
Тут надо учитывать, что вывод первой команды передаётся в качестве аргумента в конце команды xargs . Если при конструировании второй команды надо явно указать место, куда должны попасть выходные данные первой, достаточно воспользоваться парой фигурных скобок, <> и параметром –i для замены аргумента в нужном месте:
Команда xargs
Итоги
Полезности для командной строки Linux – тема невероятно обширная. Поэтому любой список, подобный нашему, можно пополнять очень и очень долго. Например, много неожиданного скрыто в командах awk и sed . Пожалуй, главное – чтобы такие вот списки шли в дело.
А какими интересными приёмами работы в командной строке пользуетесь вы?
Источник