Урок 3 из 16 · Слайд 1 из 12
💪

Терминал: Прокачка и Игра

Новые команды + пишем игру прямо в терминале!

На прошлом уроке ты освоил базовые команды: ls, cd, mkdir, cat, rm.

Сегодня ты:

  • Узнаешь продвинутые команды: grep, find, pipe, sort, chmod, ps
  • Поймёшь как соединять команды в цепочки через пайп |
  • Напишешь настоящий bash-скрипт — игру «Угадай число»
  • Запустишь игру прямо в терминале!
🎮 К концу урока у тебя будет своя игра, которую запускают командой bash game.sh — как настоящий программист!
📖 Словарь урока
Bash — язык сценариев для терминала. Можно писать программы прямо в файле .sh
💬 «Я написал bash-скрипт и запустил его командой bash game.sh»
Скрипт — файл с набором команд, которые выполняются по очереди
💬 «Мой скрипт автоматически создаёт папки и файлы»
Пайп (|) — символ, который передаёт результат одной команды в другую
💬 «ls | grep txt показало только .txt файлы»
Урок 3 · Слайд 2 из 12
🔍

grep — ищем текст в файлах

Как Ctrl+F, только для командной строки

grep ищет строки, содержащие нужное слово, в файле или в выводе другой команды.

grep — примеры
# Ищем слово "ошибка" в файле лога
$ grep "ошибка" log.txt
строка 15: ошибка соединения
строка 42: критическая ошибка

# -i = игнорировать регистр (Ошибка = ошибка = ОШИБКА)
$ grep -i "error" log.txt

# -n = показать номер строки
$ grep -n "TODO" index.js
23: // TODO: добавить кнопку
71: // TODO: исправить баг

# -r = искать рекурсивно во всех файлах папки
$ grep -r "function" ./src/
./src/main.js:3: function init() {
./src/utils.js:12: function calculate() {
📖 Словарь
grep — поиск строк по шаблону. Global Regular Expression Print
💬 «grep 'function' code.js нашёл все функции в файле»
Флаг — дополнительная опция команды, пишется через дефис: -i, -n, -r
💬 «Флаг -i делает поиск нечувствительным к регистру»
Регулярное выражение — шаблон для поиска текста (grep может искать по нему)
💬 «grep '[0-9]' файл найдёт все строки с цифрами»
Урок 3 · Слайд 3 из 12
🔗

Пайп | — соединяем команды

Результат одной команды → вход другой

Символ | (пайп) — суперсила терминала. Он берёт вывод одной команды и передаёт его как ввод следующей.

ls
список файлов
|
grep ".js"
фильтр
|
sort
сортировка
результат
только .js, по алфавиту
pipe | — примеры
# Список файлов → только .txt
$ ls | grep ".txt"
notes.txt homework.txt

# Список процессов → найти браузер
$ ps aux | grep "chrome"
user 1234 chrome --type=renderer

# Посчитать количество файлов в папке
$ ls | wc -l
42

# История команд → найти git
$ history | grep "git"
145 git status
149 git commit -m "fix"
📖 Словарь
Пайп (|) — передаёт вывод одной команды на вход другой
💬 «ls | grep .js показало только JavaScript файлы»
wc -l — считает количество строк. Word Count
💬 «ls | wc -l сказало что файлов 42»
sort — сортирует строки по алфавиту
💬 «cat names.txt | sort вывело имена по алфавиту»
Урок 3 · Слайд 4 из 12
🗂️

find — ищем файлы

Найти любой файл на всём компьютере

find — примеры
# Найти все .txt файлы в текущей папке и вложенных
$ find . -name "*.txt"
./notes.txt
./school/homework.txt
./projects/readme.txt

# Найти все папки с именем "build"
$ find . -type d -name "build"
./project1/build
./project2/build

# Найти файлы больше 10MB
$ find . -size +10M
./videos/урок.mp4

# Найти и удалить все .log файлы (осторожно!)
$ find . -name "*.log" -delete

-name — искать по имени
find . -name "*.js"

-type f — только файлы
find . -type f

-type d — только папки
find . -type d

-size — по размеру
find . -size +1M

📖 Словарь
find — поиск файлов и папок по различным критериям
💬 «find . -name "*.py" нашёл все Python файлы в проекте»
Шаблон (wildcard) — символ * означает «любое количество любых символов»
💬 «*.txt означает любой файл с расширением .txt»
-type — фильтр: f = файл, d = директория (папка)
💬 «find . -type d показал только папки»
Урок 3 · Слайд 5 из 12
📊

head, tail, sort, wc — обрабатываем текст

Мощные команды для работы с данными

text commands
# head — первые 5 строк файла
$ head -5 scores.txt
Алиса: 95
Боб: 87
Вася: 72
Галя: 91
Дима: 63

# tail — последние строки (например, свежие логи)
$ tail -10 server.log
[14:05] Пользователь вошёл
[14:06] Запрос к API

# sort — сортировка + uniq — убрать дубли
$ cat names.txt | sort | uniq
Алиса
Боб
Вася

# wc: считаем строки, слова, символы
$ wc essay.txt
42 310 1820 essay.txt
# ^ ^ ^ — строки слова символы
📖 Словарь
head / tail — первые / последние N строк файла
💬 «tail -f log.txt следит за обновлениями лога в реальном времени»
sort — сортировка строк по алфавиту или числу
💬 «sort -n scores.txt отсортировал числа по возрастанию»
wc — считает строки (-l), слова (-w), символы (-c). Word Count
💬 «cat essay.txt | wc -w сказало что в сочинении 310 слов»
Урок 3 · Слайд 6 из 12
⚙️

chmod, ps, kill — управление системой

Права доступа и процессы

system commands
# chmod — изменить права доступа к файлу
$ chmod +x game.sh # сделать файл исполняемым
$ ./game.sh # теперь можно запустить!

# chmod 755 = владелец всё, остальные только читают
$ chmod 755 script.sh

# ps — показывает запущенные процессы
$ ps aux | head -5
USER PID %CPU %MEM COMMAND
user 1234 0.5 1.2 python3 server.py
user 1235 0.0 0.4 bash

# kill — остановить процесс по его PID
$ kill 1234
[1]+ Terminated python3 server.py
📖 Словарь
chmod — изменение прав доступа к файлу. Change Mode. +x = сделать исполняемым
💬 «chmod +x game.sh позволило запустить скрипт как программу»
Процесс — запущенная программа. У каждого есть свой PID — уникальный номер
💬 «Браузер — это процесс. ps показал его PID: 1234»
kill — посылает сигнал процессу (обычно завершить). kill PID_номер
💬 «Программа зависла — я нашёл PID через ps и остановил через kill»
Урок 3 · Слайд 7 из 12
🖊️

Пишем Bash-скрипт

Программируем прямо в терминале!

Bash-скрипт — это обычный текстовый файл с расширением .sh. Внутри — команды терминала, переменные, условия и циклы.

hello.sh — первый скрипт
#!/bin/bash
# Эта строка называется shebang — говорит системе: «запусти через bash»

# Переменные в bash
name="Алиса" # без пробелов вокруг =
age=12

# echo выводит текст
echo "Привет, $name!" # $name подставляет значение
echo "Тебе $age лет"

# Ввод от пользователя
echo "Как тебя зовут?"
read user_name # read читает ввод с клавиатуры
echo "Привет, $user_name! 👋"
Запускаем скрипт
$ bash hello.sh
Привет, Алиса!
Тебе 12 лет
Как тебя зовут?
Максим # ← вводим с клавиатуры
Привет, Максим! 👋
📖 Словарь
#!/bin/bash (shebang) — первая строка скрипта, указывает какой интерпретатор использовать
💬 «Shebang говорит: запусти этот файл через bash»
read — читает строку введённую пользователем с клавиатуры
💬 «read name сохранило то что я напечатал в переменную name»
$переменная — знак $ перед именем подставляет значение переменной
💬 «echo $name вывело Алиса — значение переменной name»
Урок 3 · Слайд 8 из 12
🔀

Условия и циклы в Bash

if/else и while — как в Python, но с особым синтаксисом

conditions.sh
#!/bin/bash

# Условие if/elif/else
score=85

if [[ $score -ge 90 ]]; then
  echo "Отлично! 🏆"
elif [[ $score -ge 70 ]]; then
  echo "Хорошо 👍"
else
  echo "Нужно постараться 💪"
fi # fi = закрытие if (if наоборот)

# Цикл while — пока условие истинно
count=1
while [[ $count -le 5 ]]; do
  echo "Шаг $count"
  (( count++ )) # увеличиваем счётчик
done

Операторы сравнения в bash:

  • -eq = равно, -ne = не равно
  • -gt = больше, -lt = меньше
  • -ge = больше или равно, -le = меньше или равно
📖 Словарь
if [[ ]] then ... fi — условная конструкция в bash. fi закрывает if
💬 «if [[ $score -ge 90 ]] then echo Отлично fi»
while [[ ]] do ... done — цикл: выполняет команды пока условие истинно
💬 «while [[ $lives -gt 0 ]] — продолжать пока есть жизни»
((count++)) — увеличивает переменную count на 1 (инкремент)
💬 «(( attempts++ )) считает количество попыток»
Урок 3 · Слайд 9 из 12
🎮

Создаём игру: план

«Угадай число» — классика в новом формате

Мы напишем игру «Угадай число». Компьютер загадывает число от 1 до 100, игрок угадывает, получает подсказки.

1
Загадать число
Случайное число от 1 до 100 через $RANDOM
2
Спросить игрока
Вывести приглашение и прочитать ввод через read
3
Сравнить числа
if: больше / меньше / угадал — дать подсказку
4
Цикл until
Повторять пока не угадал. Считать попытки
5
Победа!
Поздравить и показать сколько попыток потрачено
6
Запустить!
chmod +x game.sh и ./game.sh
📖 Словарь
$RANDOM — встроенная переменная bash, каждый раз даёт случайное число от 0 до 32767
💬 «$(( RANDOM % 100 + 1 )) даёт число от 1 до 100»
Алгоритм — пошаговый план решения задачи
💬 «Алгоритм игры: загадать → спросить → сравнить → повторить»
Игровой цикл (game loop) — повторяющийся цикл, который держит игру запущенной
💬 «Игровой цикл продолжается пока игрок не угадает»
Урок 3 · Слайд 10 из 12
💾

Код игры — пишем!

Создай файл game.sh и скопируй код

game.sh — полный код
#!/bin/bash

# ══════════════════════════════════
# 🎮 УГАДАЙ ЧИСЛО — bash игра
# ══════════════════════════════════

# Генерируем случайное число от 1 до 100
secret=$(( RANDOM % 100 + 1 ))
attempts=0
max_attempts=7

echo "╔══════════════════════════╗"
echo "║ 🎮 УГАДАЙ ЧИСЛО! 🎮 ║"
echo "╚══════════════════════════╝"
echo "Я загадал число от 1 до 100."
echo "У тебя $max_attempts попыток!"
echo ""

while [[ $attempts -lt $max_attempts ]]; do
  left=$(( max_attempts - attempts ))
  echo -n "[Попытка $((attempts+1))/$max_attempts] Твой вариант: "
  read guess

  # Проверяем что введено число
  if ! [[ "$guess" =~ ^[0-9]+$ ]]; then
    echo "⚠️ Введи число!"
    continue
  fi

  (( attempts++ ))

  if [[ $guess -lt $secret ]]; then
    echo "📈 Моё число БОЛЬШЕ. Осталось: $((max_attempts-attempts))"
  elif [[ $guess -gt $secret ]]; then
    echo "📉 Моё число МЕНЬШЕ. Осталось: $((max_attempts-attempts))"
  else
    echo ""
    echo "🎉 УРА! Ты угадал за $attempts попыток!"
    echo "Загаданное число: $secret"
    exit 0
  fi
done

echo ""
echo "😔 Попытки закончились! Было загадано: $secret"
echo "Попробуй ещё раз: bash game.sh"
📖 Словарь
$(( выражение )) — арифметика в bash. RANDOM % 100 + 1 даёт число 1-100
💬 «$(( 5 + 3 )) посчитало 8»
continue — пропустить текущую итерацию цикла и перейти к следующей
💬 «continue пропустил попытку если ввели не число»
exit 0 — завершить скрипт. 0 = успех, 1 = ошибка
💬 «exit 0 завершило игру после победы»
Урок 3 · Слайд 11 из 12
🚀

Запускаем игру!

Пошаговая инструкция

1
Открой терминал
Linux/Mac: Terminal. Windows: WSL или Git Bash
2
Создай файл игры
nano game.sh или cat > game.sh
3
Вставь код из слайда 10
Скопируй весь код начиная с #!/bin/bash
4
Сохрани файл
В nano: Ctrl+O → Enter → Ctrl+X
5
Сделай файл исполняемым
chmod +x game.sh
6
🎮 ЗАПУСКАЙ!
bash game.sh или ./game.sh
Пример игровой сессии
$ bash game.sh
╔══════════════════════════╗
║ 🎮 УГАДАЙ ЧИСЛО! 🎮 ║
╚══════════════════════════╝
Я загадал число от 1 до 100.
У тебя 7 попыток!

[Попытка 1/7] Твой вариант: 50
📈 Моё число БОЛЬШЕ. Осталось: 6
[Попытка 2/7] Твой вариант: 75
📉 Моё число МЕНЬШЕ. Осталось: 5
[Попытка 3/7] Твой вариант: 62
📈 Моё число БОЛЬШЕ. Осталось: 4
[Попытка 4/7] Твой вариант: 68

🎉 УРА! Ты угадал за 4 попытки!
Загаданное число: 68
💡 Совет: Начинай всегда с 50 — это середина! Потом делишь оставшийся диапазон пополам. Так гарантированно угадаешь за 7 попыток — это называется бинарный поиск!
📖 Словарь
nano — простой текстовый редактор прямо в терминале
💬 «nano game.sh открыл файл в терминальном редакторе»
Бинарный поиск — алгоритм: каждый раз делим диапазон пополам. Находит за log₂(N) шагов
💬 «Бинарный поиск находит число из 100 вариантов за 7 попыток»
./скрипт.sh — запуск исполняемого файла из текущей папки (нужен chmod +x)
💬 «./game.sh запустила мою игру как программу»
Урок 3 · Слайд 12 из 12
🏆

Ты прокачал терминал!

Что ты освоил сегодня

  • grep — поиск текста в файлах и выводе команд
  • Пайп | — соединяем команды в цепочки
  • find — находим файлы по имени, типу, размеру
  • head, tail, sort, wc — обрабатываем текст
  • chmod — управляем правами доступа
  • ps, kill — смотрим и останавливаем процессы
  • Bash-скрипты — переменные, read, if, while
  • Написал и запустил игру «Угадай число»!
🌟 Бонус-задания для крутых:

1. Добавь в игру цвета: красный для «нет», зелёный для «да» (используй ANSI escape коды)
2. Сохраняй рекорд (минимальное количество попыток) в файл record.txt
3. Добавь режим сложности: лёгкий (1-50, 10 попыток), средний (1-100, 7), сложный (1-1000, 10)
📖 Итоговый словарь
ANSI escape коды — специальные последовательности для цветного вывода в терминале
💬 «echo -e "\033[32mЗелёный\033[0m" вывело зелёный текст»
Рефакторинг — улучшение кода без изменения его поведения
💬 «Я сделал рефакторинг: вынес повторяющийся код в функцию»
Следующий урок — Git: система контроля версий. Сохраняем историю кода!
💬 «После Git ты сможешь сохранить свою игру на GitHub»
← Вернуться на главную