Цикл while для целых чисел с пользовательским вводом

Это не ответ как таковой, а несколько комментариев об ошибках и отчетах об ошибках.

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

Это относится ко всем замороженным пулам дистрибутивов, в частности к Mint, стабильным версиям Debian, Ubuntu LTR, Redhat enterprise, CentOS и так далее.

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

Чтобы помочь в этом процессе, вам нужно сделать несколько вещей:

  1. Определить текущую версию программного обеспечения, в данном случае Mate.
  2. Укажите, какую версию использует ваш дистрибутив, и саму версию дистрибутива. Недопустимо предполагать, что в этом случае разработчики Mate пойдут и раскопают эту информацию о том, какая версия Mate была выпущена с Mint 17.3, что в основном приведет к тому, что они проигнорируют вашу проблему, что и произошло.
  3. Определите текущую версию вашего дистрибутива и используемую версию Mate.
  4. Определить версии всех сопутствующих программ: Nouveau, ядро, QT, Xorg.

Вполне возможно, что между вашей версией и текущей версией git было 100 или более выпусков Mate, и это единственная версия, в которой они могут действительно надежно отслеживать ошибки.

Если вы читаете свой отчет об ошибке, отправленный Mate/Marcos, вы видите, что вы предполагаете, что они либо знают, либо заботятся о том, какие особенности Mate работают в Mint. Я могу заверить вас как разработчика, что это НЕ тот случай, когда кто-то отправляет отчет о проблеме, если только я не могу четко определить, что это совершенно не связано с версией моего программного обеспечения, которое они используют, в старой версии я в основном закрываю проблему и игнорирую это, так как я никак не могу узнать, какие ошибки я исправил между годами старого программного обеспечения и сегодняшним.

Вы также не предоставили им никаких системных спецификаций, например, через inxi -bxxx.

Начиная с вашей версии Mint 17.3: https://en.wikipedia.org/wiki/Linux_Mint_version_history

Main Cinnamon, MATE 4 декабря 2015 г. [составлено из Ubuntu 14.4]

Был ВЫПУЩЕН почти 2 года назад, сделан из выпуска Ubuntu, который почти 3-4 года, но то, что он выпущен, не означает, что пакетам, из которых он был сделан, 2-3 года, вполне может быть, что некоторым из них 3-4 года, так что вы, по сути, спрашиваете Mate/ Маркоса, чтобы угадать, какая версия Mate была выпущена в то время (именно поэтому вы должны предоставить им актуальную версию Mate, работающую в вашей системе, чтобы им не пришлось гадать). Установите последнюю версию inxi, а не ту, которая поставлялась с вашим устаревшим Mint ( sudo wget -O /usr/bin/inxi smxi.org/inxi), тогда она может показать вашу версию Mate, возможно.

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

Когда вы отправляете отчет о проблеме такого типа, вы ставите сопровождающего в очень затруднительное положение, потому что вы просите его угадать что-то, о чем в принципе невозможно догадаться, поэтому я предполагаю, как они справляются с этим. это игнорировать его. Я обычно отвечаю на такие отчеты о проблемах словами «не исправлю», «не буду смотреть» и закрываю, так как речь идет об устаревшем программном обеспечении.

Кроме того, вы используете очень старую версию nouveau со старым ядром, старым Xorg и старым QT, и места, где могут возникнуть проблемы между всеми этими переменными, совершенно невозможно угадать, но вы должны как минимум показать разработчикам, о каком программном обеспечении вы здесь говорите. Точно так же вам не повезет, опубликовав отчет о проблеме в Mint, поскольку они также не собираются поддерживать старый выпуск, даже если они заявляют, что будут. Но именно здесь вы должны отправить отчет об ошибке, где он будет оставаться нерешенным 10 к 1.

Сообщалось о проблемах с QT, которые схожи для старых оконных менеджеров и старых оконных менеджеров xmonad, https://bugzilla.redhat. com/show_bug.cgi?id=1182674— одна из них, как вы можете видеть, проблема была решена в более новой версии оконного мастера, которая почти по определению не входит в эту версию Redhat.

0
22.09.2017, 17:05
2 ответа

Все просто:

!/bin/bash

while :
do
   echo "Enter a positive integer number (-99 to quit):"
   read NUMBER

   if (( NUMBER == -99 ))
   then
      exit
   fi

   echo "$NUMBER: "

   COUNTER=1
   while (( COUNTER <= NUMBER ))
   do
       echo $COUNTER
       ((COUNTER++))
   done
done
0
28.01.2020, 02:33
#!/bin/bash

while true; do
    read -p 'Number (-99 to quit): '

    if ! [[ "$REPLY" =~ ^-?[0-9]+$ ]]; then echo 'Error: Not an integer' >&2
    elif (( REPLY == -99 ));           then break
    elif (( REPLY <= 0   ));           then echo 'Error: Need positive integers >0' >&2
    else
        printf 'Got "%d", that is number %d\n' "$REPLY" "$(( ++c ))"
    fi
done

Это бесконечный цикл, выход из которого происходит, когда пользователь вводит -99. Любой положительный целочисленный ответ будет предлагать коду сказать Got "some number", за которым следует, сколько действительных чисел прочитано до сих пор, тогда как отрицательное целое число, ноль или не числовое значение -выдаст диагностическое сообщение о стандартной ошибке. В коде используется переменная REPLY, в которую записывается переменная read, если не указано другое имя переменной.

Проверка правильности числового ввода выполняется путем сопоставления ответа с регулярным выражением ^-?[0-9]+$. Это выражение будет соответствовать , если ответ имеет форму, которую мы ожидаем (необязательное тире, за которым следует хотя бы одна цифра ). Если они не совпадают, выдается диагностическое сообщение о стандартной ошибке.

Вплоть до первого elifмы не можем быть уверены, что $REPLYявляется целым числом. После этого используем ((... ))для арифметической оценки сравнений.

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

2
28.01.2020, 02:33

Теги

Похожие вопросы