Bash-скрипты. Урок 1


Всем привет!
Немного расскажу о написании скриптов на bash. Зайдёт, будем продолжать 🙂
Формат простой, ставим себе задачу, решаем, поясняем.
Поехали)

Задача: вывести информацию о свободной оперативной памяти в Mbytes.
Решение: free -m | grep Mem | sed 's/\s\+/ /g' | cut -d' ' -f4
Пояснение:
1. Команда free
Выводит информацию об использовании оперативной (RAM-память, она же ОЗУ) и виртуальной памяти (SWAP – один из механизмов виртуальной памяти, при котором отдельные фрагменты памяти (обычно неактивные) перемещаются из ОЗУ во вторичное хранилище (отдельный раздел или файл), освобождая ОЗУ для загрузки других активных фрагментов памяти) в Kbytes.
Смотрим вывод free:


Для вывода информации в Mbytes добавляем опцию -m (полный список опций можно посмотреть с опцией --help):

Осталось обработать вывод 🙂

2. Оператор "|"
Особым вариантом перенаправления вывода является организация программного канала (иногда называют трубопроводом или конвейером). Для этого две или несколько команд, таких, что вывод предыдущей служит вводом для следующей, соединяются символом вертикальной черты — "|". При этом стандартный выходной поток команды, расположенной слева от символа "|", направляется на стандартный ввод программы, расположенной справа от символа "|".
Запоминаем, будем очень часто пользоваться этим оператором.

3. Команда grep
Утилита командной строки, которая находит на вводе строки, отвечающие заданному регулярному выражению (О! Да! Над регулярными выражениями можно медитировать вечно ^_^), и выводит их, если вывод не отменён специальным ключом.
Нас интересует строка с буквами "Mem"
free -m | grep Mem

Видим, что из всего вывода осталась только одна строка содержащая "Mem". Этот вывод передаем далее оператором… правильно "|".

4. Команда sed
Это потоковый редактор текста, работающий по принципу замены. Его можно использовать для поиска, вставки, замены и удаления фрагментов.
В полученной строке между числами и символами есть повторяющиеся пробельные символы. Наша задача: места с несколькими пробелами заменить на один пробел.
Задаем команде sed команду редактирования "s/что_заменять/на_что_заменять/опции" с опцией g (g — заменять все вхождения/совпадения). В поле "на_что_заменять" ставим пробел " ".
В поле "что_заменять" используем регулярное выражение "\s\+", где "\s" обозначает любой пробельный символ, а "\+" обозначает кол-во повторений символа, один символ или больше.
free -m | grep Mem | sed 's/\s\+/ /g'

Этот вывод передаем далее оператором… правильно "|".

5. Команда cut
Это утилита командной строки, которая позволяет вырезать части строк из указанных файлов или переданных данных и выводить результат в стандартный вывод. Его можно использовать для вырезания частей строки по разделителю, позиции байта и символу.
В полученной на обработку строке есть числа и символы разделенные одиночными пробелами. Интересующее нас число находится в четвертом поле. 1-е «Mem:», 2-е «7857», 3-е «1087», 4-е «5616» и т.д.
Опцией -d устанавливаем свой разделитель «пробел» вместо стандартного TAB "-d' '", а опцией -f перечень поля(ей) для вырезания, -f4 — наше 4-е поле/число после третьего пробела.
free -m | grep Mem | sed 's/\s\+/ /g' | cut -d' ' -f4

Мы выполнили поставленную задачу (:ok:)
На сегодня все и всем хорошего настроения 🙂

  1. Samp Автор записи

    Да уж, написать решение было много проще, чем написать пояснение 😀

  2. Зябл

    Пользователи Windows помчались пробовать и у них ничего не получилось.

  3. Samp Автор записи

    «помчались пробовать»
    Ага, счас) Пусть кликают мышой 😀

Добавить комментарий