type: standard
aspect: format
title: "СТАНДАРТ ВОПРОСОВ"
version: 1.0.0
date: 2026-02-19
status: active
Версия: 1.0.0
Дата: 2025-12-24
Статус: Обязательный
ВСЕ вопросы в системе задаются ТОЛЬКО с номерованными вариантами.
Каждый вариант должен быть:
- Однозначным (нет двусмысленности)
- Конкретным (понятно что произойдёт)
- Пронумерованным (1, 2, 3...)
<Вопрос>?
1) <Вариант 1>
2) <Вариант 2>
3) <Вариант 3>
0) Отмена / Выход
Выбор [номер]:
| Элемент | Требование |
|---|---|
| Вопрос | Короткий, понятный, со знаком ? |
| Варианты | Минимум 2, максимум 9 |
| Нумерация | 1, 2, 3... (НЕ a, b, c) |
| Отмена | Всегда есть 0) для выхода/отмены |
| Промпт ввода | Выбор [номер]: или Выбор: |
❌ Yes/No вопросы
# ПЛОХО
read -p "Продолжить? (y/n): " confirm
❌ Буквенные варианты
# ПЛОХО
echo "a) Вариант A"
echo "b) Вариант B"
❌ Свободный ввод без вариантов
# ПЛОХО
read -p "Что делать?: " action
❌ Неявные варианты
# ПЛОХО
read -p "Введите команду: " cmd
echo "Что восстановить?"
echo ""
echo " 1) Полное восстановление"
echo " 2) Только workspace"
echo " 3) Только критические данные"
echo " 4) Только Docker volumes"
echo " 0) Отмена"
echo ""
read -p "Выбор: " choice
case $choice in
1) restore_full ;;
2) restore_workspace ;;
3) restore_critical ;;
4) restore_docker ;;
0) exit 0 ;;
*) echo "Неверный выбор" ;;
esac
echo "Будет выполнено:"
echo " • Удаление всех данных"
echo " • Восстановление из бэкапа"
echo ""
echo "Продолжить?"
echo " 1) Да, продолжить"
echo " 2) Нет, отменить"
echo ""
read -p "Выбор: " confirm
case $confirm in
1) execute_operation ;;
2) echo "Отменено"; exit 0 ;;
*) echo "Неверный выбор"; exit 1 ;;
esac
echo "Выберите модель:"
echo " 1) Opus 4.5 (архитектура)"
echo " 2) Sonnet 4 (разработка)"
echo " 3) Haiku 4.5 (поиск)"
echo " 0) Отмена"
echo ""
read -p "Выбор: " model
case $model in
1) use_opus ;;
2) use_sonnet ;;
3) use_haiku ;;
0) exit 0 ;;
esac
# Неоднозначно, пользователь может ввести y/Y/yes/YES/1
read -p "Продолжить? (y/n): " confirm
if [[ "$confirm" =~ ^[Yy]$ ]]; then
execute
fi
ИСПРАВЛЕНО:
echo "Продолжить выполнение?"
echo " 1) Да, продолжить"
echo " 2) Нет, отменить"
read -p "Выбор: " choice
case $choice in
1) execute ;;
2) exit 0 ;;
esac
# Пользователь может ввести что угодно
read -p "Введите имя архива: " name
ИСПРАВЛЕНО:
echo "Выберите архив:"
i=1
for f in *.tar.gz; do
echo " $i) $(basename $f)"
((i++))
done
echo " 0) Отмена"
read -p "Выбор: " choice
Всегда показывать ЧТО будет сделано:
echo "ОПЕРАЦИЯ: Полное восстановление"
echo ""
echo "Будет выполнено:"
echo " 1. Восстановление из GOLDEN"
echo " 2. Переустановка npm"
echo " 3. Перезапуск сервисов"
echo ""
echo "⚠ Время выполнения: ~5 минут"
echo ""
echo "Продолжить?"
echo " 1) Да, выполнить"
echo " 2) Нет, отменить"
Всегда проверять ввод:
read -p "Выбор: " choice
case $choice in
1|2|3)
# Валидный выбор
;;
0)
echo "Отменено"
exit 0
;;
*)
echo "❌ Неверный выбор: $choice"
echo "Допустимые значения: 1, 2, 3, 0"
exit 1
;;
esac
Если есть рекомендуемый вариант:
echo "Выберите действие:"
echo " 1) Быстрое восстановление (рекомендуется)"
echo " 2) Полное восстановление"
echo " 3) Выборочное восстановление"
echo " 0) Отмена"
echo ""
read -p "Выбор [1]: " choice
choice=${choice:-1} # По умолчанию 1
Стандарт НЕ применяется к:
- Параметрам командной строки (--flag)
- API endpoints
- Конфигурационным файлам
- Логам
read -p с y/n0) Отмена если нетcase с *)# Найти все y/n вопросы
grep -r "read -p.*y/n" --include="*.sh"
# Найти все read без case
grep -A5 "read -p" *.sh | grep -v "case"
#!/bin/bash
# Пример правильного меню
show_menu() {
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " ГЛАВНОЕ МЕНЮ"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo " 1 Начать работу"
echo " 2 Настройки"
echo " 3 Статус системы"
echo " 4 Восстановление"
echo " 0 Выход"
echo ""
echo -n " Выбор: "
}
main() {
while true; do
show_menu
read choice
case $choice in
1)
start_work
;;
2)
settings_menu
;;
3)
show_status
;;
4)
recovery_menu
;;
0)
echo "Выход..."
exit 0
;;
*)
echo "❌ Неверный выбор: $choice"
echo "Нажмите Enter для продолжения..."
read
;;
esac
done
}
main "$@"
0) Отмена/Выходcase*))Версия: 1.0.0