Практикум по созданию сценариев командной строки

Вам знаком по фильмам образ хакера, который нажимает клавиши на клавиатуре и что-то печатает на черном экране? Хотели бы выглядеть так же круто? Тогда вам надо для начала разобраться в том, что такое сценарии командной строки.

Есть два способа взаимодействия с любой операционной системой:

  1. Графический пользовательский интерфейс (GUI)
  2. Интерфейс командной строки (CLI)

GUI — это то, что большинство из нас использует. В GUI есть графическое представление, а взаимодействие с операционной системой осуществляется при помощи мыши.

CLI — это черный экран, терминал, который заменяет графический интерфейс. В него пользователь может ввести любые свои команды.

Вам наверняка интересно, какой из этих способов взаимодействия с ОС эффективнее. Ответ однозначен — CLI. Именно тут вы получаете больше свободы и доступа: можете вводить свои собственные индивидуальные команды, получать допуск к чему угодно и делать что угодно.

Что такое командная строка?

Когда вы вводите свои команды в терминал, должна быть какая-то программа, которая принимает эти команды, запускает их и выводит на экран, верно? Так вот, название этой программы  —  Shell, командная строка.

Сегодня доступны различные типы командной строки, такие как Bourne shell (sh), C shell (csh), TC shell (tcsh), Korn shell (ksh), Bourne Again SHell (bash). Но широко используются только Bourne shell (sh) и Bourne Again SHell (bash). Bash похожа на обновленную версию sh. В Windows есть PowerShell, хотя скрипты командной строки более популярны в Linux.

Что такое сценарий?

Работая на компьютере, вы постоянно нуждаетесь в повторении каких либо действий. Каждый раз вводить команды для них было бы утомительно, поэтому вы можете объединить все эти команды в один файл, а затем выполнить этот файл для автоматизации задач/действий. Это и называется “Сценарий”. Расширение, используемое для файла — ‘.sh’ eg. test. sh

Таким образом, все скрипты — это просто совокупность необходимых команд. Сценарий подчиняется логике формирования нормального рабочего процесса для автоматизации задач.

Теперь рассмотрим примеры скриптов командной строки. Но сначала познакомимся с некоторыми базовыми командами Linux. Просмотрите приведенные ниже команды:

Pwd : вывести рабочий каталог
mkdir : создать каталог
cd : изменить каталог
Ls : перечислить компьютерные файлы
ls -la : перечислить все файлы, включая скрытые
Ls -L : перечислить файлы с указанием размеров и других деталей
touch : создать пустой файл
mv : переместить/переименовать файл
cp : скопировать файл
cp -r : скопировать каталог рекурсивно
rm : удалить файл
rm -r : удалить каталог рекурсивно
more : прочитать весь контент файла
tail : прочитать последние 10 строк (обычно для файлов журнала)
grep : искать графическое изображение или текст внутри файла
history : вывести историю недавно введенных команд
top : перечислить 10 процессов, максимально использующих память
comm : сравнить два файла построчно
df & du : проверить объемы свободного и использованного пространства на диске
date : показать текущую дату/время
uptime : определить, как долго система была активна (после запуска)
finger user : показать информацию о пользователе

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

В нем можно прописать функции, if-elif-else-условия, оператор case и, конечно, циклы.

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

1. Создание функции, которая принимает входные данные от пользователя в виде имени и передает ему приветствие.

#!/bin/bash
echo "Hey, there! What is your name?"
read name
echo "Nice to meet you, $name"

Комбинация символов #! известна как SheBang (шебанг), или HashBang (хэш-банг). Она применяется для указания интерпретатора, который должна использовать операционная система при запуске скрипта. В нашем примере #! указывает: /bin/bash — это путь для bash.

Затем используем echo (эхо), чтобы спросить имя пользователя, а потом — read (читать), чтобы получить ввод от пользователя.

И, наконец, печатаем сообщение “Приятно познакомиться, $name”. Здесь $ используется, чтобы сообщить скрипту, что name является переменной, а не строкой.

2. Постановка задачи: создать IP-развертку, которая будет сканировать IP-адреса всех активных устройств в сети

Для этого нам просто нужно запустить цикл for и пропинговать каждый IP-адрес в данной сети, и если этот IP-адрес активен, то вывод будет примерно таким: “64 bytes from 200-147-67-142.static.uol.com.br (200.147.67.142): icmp_seq=20 ttl=241 time=253 ms

Поскольку в действительных IP-адресах 64 байта, мы используем эту информацию для команды grep, чтобы выполнить вывод действительных IP-адресов:

#!/bin/bashif ["$1" == ""]
then
echo "Oops! You forgot an IP Address"
echo "Syntax: ./ipsweep.sh" 192.168.4"

else
for ip in `seq 1 254`; do
ping -c 1 $1.$ip | grep "64 bytes" | cut -d " " -f 4 | tr -d ":" &
done
fi

Затем с помощью команды cut выберем четвертый номер поля из приведенного выше предложения, а именно (200.147.67.142):

После этого посредством команды tr избавимся от двоеточия (:) в конце IP.

И, наконец, используем &, чтобы все эти процессы выполнялись одновременно в фоновом режиме, причем быстро.

Если вы не станете использовать &, то процесс будет очень медленным. Можете сами почувствовать разницу, сначала запустив скрипт без &, а затем с ним.

Теперь запускаем эти команды в цикле for, который выполняется внутри условия if-else, чтобы проверить, предоставил ли пользователь поле диапазона сети или нет. Если диапазон не указан, то скрипт выведет на терминал “Oops! You forgot an IP Address” (“Вы забыли IP-адрес”) с правильным синтаксисом для запуска скрипта.

И это все. Вы успешно прошли урок по сценарию командной строки! Надеюсь, что теперь у вас есть маломальское представление о том, что такое скрипты командной строки, или, по крайней мере, вам захотелось узнать о них больше.

Читайте также:

Читайте нас в TelegramVK и Яндекс.Дзен


Перевод статьи Tania Islam: Shell Scripting: Getting started with shell scripting

Предыдущая статьяКак оставаться на гребне волны в океане современных веб-разработок
Следующая статьяНапишите свой первый микросервис на JavaScript