Рейтинг:0

Пока $value != [a..b]

флаг in

Я пытаюсь написать функцию, которая перезаписывает значение в соответствии с выбором пользователя. Пока это выглядит так:

в то время как [[ $code_id != [1-28] ]]; делать
echo "Пожалуйста, выберите значение..."
эхо "1. А"
эхо "2.Б"
эхо "3.С"
эхо "4.Д"
...
эхо "28.З"
сделано
echo "ИНФОРМАЦИЯ: код $code_id."

Пользователь должен написать выбранное число (1-28). Но в итоге код возвращает меня, на выбор. Я понимаю, какая причина в условии (пока... делать), но как мне это написать, чтобы мой код работал?

флаг hr
Что именно вы пытаетесь сделать здесь? (1) вы никогда не присваиваете значение `code_id` и (2) `[1-28]` соответствует только цифрам 1,2 и 8 - это не числовой диапазон от 1 до 28. Возможно, вы ищете [ выберите цикл] (https://askubuntu.com/a/1716/178692)?
флаг cn
В вашем алфавите 28 букв?
Bruyi avatar
флаг in
@Rinzwind у меня есть 10+ букв, у которых 1 или 2 количество цифр в числе: если я сделаю диапазон `$code_id = [1-9]`, я могу перейти на следующий этап, но другой (`[ 1-10]`, например) - этот этап повторяется.
Рейтинг:3
флаг cn

Вот одно из возможных решений, в котором используется бесконечный цикл с условным разрывом внутри.

#!/бин/баш

пока правда
делать
  читать -p "Введите значение: " значение

  если [[ $value =~ ^[0-9]{1,2}$ ]] && ((value <= 28)); затем разбить; фи
  # это число из одной или двух цифр, и если оно истинно, меньше или равно 28?
сделано

echo "Значение: ${value}"

Диапазоны в регулярных выражениях не работают, как в математике. Думайте о диапазонах здесь как о диапазоне последовательных символов из ASCII-таблица. Итак, набор символов [1-28] состоит из 1, 2 и 8.

Вот еще один пример. Набор символов [а-дз] включает символы из диапазона объявление, эти а, б, с, д, и характер г.

В условном тесте выполнения Bash [[, когда =~ используется оператор, строка справа от оператора сопоставляется как регулярное выражение.

Рейтинг:2
флаг in

Похоже, вы хотите использовать Bash Выбрать встроенный:

выберите code_id в {A..Z}; делать
    [[ -z $code_id ]] || сломать
сделано
echo "ИНФОРМАЦИЯ: код ${code_id}."

Вывод:

1) А 3) В 5) Д 7) Ж 9) И 11) К 13) М 15) О 17) В 19) С 21) У 23) Ж 25) Д
2) B 4) D 6) F 8) H 10) J 12) L 14) N 16) P 18) R 20) T 22) V 24) X 26) Z
#? 6
ИНФОРМАЦИЯ: Код F.

Вы можете ограничить КОЛОННЫ например.:

КОЛОННЫ=1
выберите code_id в {A..Z}; делать
    [[ -z $code_id ]] || сломать
сделано
echo "ИНФОРМАЦИЯ: код ${code_id}."

Вывод:

 1) А
 2) Б
 3) С
 4) Д
 5) Э
 6) Ф
 7) Г
 8) Н
 9) я
10) Дж
11) К
12) Л
13) М
14) Н
15) О
16) П
17) В
18) Р
19) С
20) Т
21) У
22) В
23) В
24) Х
25) Ы
26) З
#? 17
ИНФОРМАЦИЯ: Код Q.
Рейтинг:0
флаг in

Решение - изменить условие на в то время как [[ $rep_id -le 0 || $rep_id -ge 13 ]]; делать...

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.