Наши скрипты пока работают в одну сторону — выводят информацию. Но настоящий скрипт должен уметь спрашивать. «Какой файл обработать?», «Удалить старые логи? (y/n)», «Введите имя пользователя» — интерактивность делает скрипт универсальным. echo — вывод текста**

echo мы уже используем постоянно, но есть пара трюков, которые стоит знать:

# Обычный вывод
echo "Привет"

# Без перевода строки в конце (следующий вывод будет на той же строке)
echo -n "Загрузка... "

# Интерпретация спецсимволов: табуляция, перевод строки
echo -e "Имя:\tАлекс\nВозраст:\t25"
Имя:	Алекс
Возраст:	25

Флаг -n — не добавлять перевод строки. -e — интерпретировать \t (табуляция) и \n (новая строка). printf — форматированный вывод**

Когда нужен точный контроль над форматом — printf надёжнее, чем echo:

name="Алекс"
score=95

printf "Студент: %s, балл: %d\n" "$name" "$score"
Студент: Алекс, балл: 95

printf отлично подходит для таблиц и выровненного вывода:

printf "%-15s %5s %10s\n" "Имя" "Возраст" "Город"
printf "%-15s %5d %10s\n" "Алекс" 25 "Москва"
printf "%-15s %5d %10s\n" "Мария" 30 "Петербург"
Имя                Возраст      Город
Алекс                 25     Москва
Мария                 30  Петербург

%-15s — строка, выровненная влево, шириной 15 символов. %5d — число, шириной 5 символов, выровненное вправо.

read — ввод от пользователя**

Вот где скрипт становится интерактивным:

#!/bin/bash

echo -n "Как вас зовут? "
read name
echo "Привет, $name!"
Как вас зовут? Алекс
Привет, Алекс!

Команда read останавливает скрипт и ждёт, пока пользователь введёт текст и нажмёт Enter. Введённое значение записывается в переменную.

Удобный флаг -p — совмещает приглашение и ввод в одной команде:

read -p "Введите директорию для бэкапа: " backup_dir
echo "Буду копировать из: $backup_dir"

Ещё полезные флаги:

# Скрытый ввод (для паролей) — символы не отображаются
read -sp "Пароль: " password
echo ""  # Перевод строки после скрытого ввода
echo "Пароль принят (длина: ${#password} символов)"

# Таймаут — ждать не больше 10 секунд
read -t 10 -p "Введите за 10 секунд: " answer

Практический пример — подтверждение опасного действия:

#!/bin/bash

read -p "Удалить все логи старше 30 дней? (y/n): " confirm

if [ "$confirm" = "y" ]; then
    echo "Удаляю..."
    find /var/log/app -name "*.log" -mtime +30 -delete 2>/dev/null
    echo "Готово."
else
    echo "Отменено."
fi

Не пугайтесь конструкции if — мы разберём её подробно в следующем уроке. Сейчас важен read: скрипт спрашивает подтверждение перед опасным действием. Код возврата — $? и exit**

Каждая команда в Linux после завершения возвращает число — код возврата. Это число говорит: «я завершилась успешно» или «что-то пошло не так».

ls /etc > /dev/null
echo $?
0

Успех — директория существует, ls отработал.

ls /несуществующая > /dev/null 2>&1
echo $?
2

Ошибка — директории нет, код возврата не 0.

Почему это важно? Потому что if в Bash проверяет именно код возврата. Условие «истинно» — если команда вернула 0. «Ложно» — если не 0. Мы увидим это в следующем уроке.

В собственных скриптах вы можете задать код возврата через exit:

#!/bin/bash

if [ ! -f "$1" ]; then
    echo "Ошибка: файл $1 не найден" >&2
    exit 1
fi

echo "Обрабатываю $1..."
exit 0

exit 0 — скрипт завершился успешно. exit 1 — с ошибкой. Это позволяет другим скриптам проверять, отработал ли ваш скрипт корректно.

Шпаргалка:

Команда Что делает
echo "text" Вывести текст
echo -n "text" Вывести без перевода строки
echo -e "a\tb" Интерпретировать спецсимволы
printf "%s %d\n" a 1 Форматированный вывод
read var Считать ввод пользователя в переменную
read -p "?" var Приглашение + ввод
read -s var Скрытый ввод (пароли)
$? Код возврата последней команды
exit 0 Завершить скрипт с кодом 0 (успех)
exit 1 Завершить скрипт с кодом 1 (ошибка)

В следующем уроке — условия. if, else, проверки файлов, сравнение строк и чисел. Скрипт научится принимать решения.

echo — вывод текста. -n — без перевода строки. -e — спецсимволы (\t, \n).

printf — форматированный вывод. %s — строка, %d — число. Не добавляет \n автоматически. Надёжнее echo для кроссплатформенных скриптов.

read — считать ввод пользователя. -p — приглашение. -s — скрытый ввод. -t N — таймаут.

Код возврата ($?) — 0 = успех, не 0 = ошибка. exit N — завершить скрипт с кодом N. Ошибки выводятся в stderr (>&2).

Обсуждение урока

0
Комментарии видны всем. Чтобы участвовать в обсуждении, войдите или зарегистрируйтесь.
Модерация сообщества

Пожаловаться на комментарий

Расскажите модераторам, что именно требует внимания.