Данное руководство поможет написать простой скрипт оболочки при помощи базовых команд для отображения и сбора информации пользователей.
Примечание: Предполагается, что вы ознакомились с первым руководством из этой серии.
Команда echo
Команда echo позволяет отображать данные пользователя (простые текстовые строки, переменные). У этой команды есть два параметра:
- Флаг –n подавляет символ новой строки.
- Флаг –е включает следующий набор данных внутри строки:
\a - сигнал тревоги
\b - знак возврата на одну позицию
\c - подавление символа новой строки в конце (аналогично флагу –n)
\e - знак перехода
\n - новая строка
\r - возврат каретки
\t - горизонтальная табуляция
\0xx – ASCII-символ
\\ - обратная косая
К примеру, эти две команды работают идентично:
echo -e "Text\c"
echo -n "Text"
Чтобы отобразить переменные при помощи команды echo, просто напишите их в строку, поставив перед этим символ $:
string=World!
echo "Hello $string"
Эта команда позволяет комбинировать текстовые строки с переменными и командами в одну строку. Кроме того, можно даже поместить несколько строк текста в одну строку кода, добавив команду \n перед новой строкой.
Форматирование текста при помощи echo
Команда echo позволяет отображать цветной и отформатированный текст. Имейте в виду: не все функции echo одинаково работают в разных терминальных клиентах, потому результаты скрипта могут отличаться в зависимости от терминала. Но поскольку это просто визуальные изменения текста, не играющие большой роли, в большинстве случаев на эти различия не обращают внимания. Все настройки текста (полужирный шрифт, курсив, цветной текст) определяются ESC-последовательностями (кодом, идущим после знака перехода \е):
echo -e "This is \e[1mBold"
Наиболее часто встречаются такие коды:
Полужирный шрифт:\e[1m
Размер: \e[2m
Подчёркивание: \e[4m
Обратить цвета: \e[7m
Эти коды можно комбинировать, чтобы получить, к примеру, полужирный подчёркнутый шрифт. Чтобы сбросить форматирование, используйте:
echo -e "\e[4mThis \e[1mis\e[0m \e[7man example \e[0mstring"
Настройка цветного текста происходит аналогичным образом. Каждый цвет имеет свой код. Коды цветов используются так же, как и коды форматирования. Большинство терминальных клиентов поддерживает следующие цвета:
Чёрный: \e[30m (текст) \e[40m (фон)
Красный: \e[31m (текст) \e[41m (фон)
Зелёный: \e[32m (текст) \e[42m (фон)
Жёлтый: \e[33m (текст) \e[43m (фон)
Синий: \e[34m (текст) \e[44m (фон)
Пурпурный: \e[35m (текст) \e[45m (фон)
Голубой: \e[36m (текст) \e[46m (фон)
Светло-серый: \e[37m (текст) \e[47m (фон)
Цвета по умолчанию: \e[39m (текст) \e[49m (фон)
Можно комбинировать различные цвета текста и фона, а также использовать вместе с ними коды форматирования текста.
Команда read
Команда read – противоположность команды echo. Она считывает ввод в одну или более переменных. В качестве аргумента этой команды используется переменная, в которой нужно хранить данные. для примера рассмотрите простой скрипт, который создаёт папку с заданным именем:
#!/bin/bash
read foldername
mkdir foldername
Но этот скрипт не использует интерфейс. Как пользователь поймёт, когда и что нужно ввести?
Пример скрипта
Теперь попробуйте использовать полученные знания в написании простого скрипта, который будет отображать отформатированные сообщения и запрашивать ввод данных. рассмотрите скрипт первого руководства этой серии и возьмите его за основу.
Создайте и откройте файл:
touch ~/bin/filebackup2
chmod +x ~/bin/filebackup2
nano ~/bin/filebackup2
Перепишите скрипт, чтобы он получил доступ к интерфейсу:
#!/bin/bash
#Backup script 2.0
#Description: makes a copy of any given file at the backup folder
#Author: Your Name
#Date: 2/22/2016
#Request the backup folder from the user:
echo -e "\e[1m\e[32mFile Backup Utility\n\e[39m\e[0mPlease input your backup folder:"
read BACKUPFOLDER
#The script will make sure the folder exists
mkdir -p $BACKUPFOLDER
#Request files to be backed up:
echo -e "\e[47m\e[30mWhich files do you want backed up?\e[39m\e[49m"
read FILES
cp -a $FILES $BACKUPFOLDER
Заключение
Данное руководство охватывает базовые команды, необходимые для создания интерактивного скрипта.