Вам знаком по фильмам образ хакера, который нажимает клавиши на клавиатуре и что-то печатает на черном экране? Хотели бы выглядеть так же круто? Тогда вам надо для начала разобраться в том, что такое сценарии командной строки.
Есть два способа взаимодействия с любой операционной системой:
- Графический пользовательский интерфейс (GUI)
- Интерфейс командной строки (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-адрес”) с правильным синтаксисом для запуска скрипта.
И это все. Вы успешно прошли урок по сценарию командной строки! Надеюсь, что теперь у вас есть маломальское представление о том, что такое скрипты командной строки, или, по крайней мере, вам захотелось узнать о них больше.
Читайте также:
- Продвинутый CLI: команды, которые должен знать каждый разработчик
- Функциональные и гибкие Shell скрипты
- Моя среда разработки в Linux
Читайте нас в Telegram, VK и Яндекс.Дзен
Перевод статьи Tania Islam: Shell Scripting: Getting started with shell scripting