Как реализовать проверку орфографии в генераторе случайных чисел в скрипте Bash - PullRequest
0 голосов
/ 27 января 2020

Только что закончил писать сценарий игры с генератором чисел, которая требует, чтобы пользователь угадал число от 1 до 100, мне было любопытно, есть ли способ заставить скрипт принимать только числа в диапазоне от 1 до 100 и отклонять любую букву персонажи? Я пытался использовать

typeset -i

Но я не уверен, полностью ли я его использую или что-то упустил, вот остаток кода

#!/bin/bash
num=$((RANDOM%100))
typeset -i attempts=0
until [[ $guess == $num ]]
do
    echo -n "Enter your guessing number: "
    read -r guess
    if (( guess < num ));
    then echo "Guess Higher..."
    elif (( guess > num ));
    then echo "Guess Lower..."
    fi
(( attempts++ )) 
done
printf "Congradulations! it took $attempts guesses!\n"

Ответы [ 2 ]

2 голосов
/ 27 января 2020

принимать числа в диапазоне от 1 до 100 и отклонять любые буквенные символы?

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

echo -n "Enter your guessing number: "
read -r guess
if ! [[ $guess=~ ^[0-9]+$ ]]; then
      echo "Your guess is not a number, try again..."
      continue;
fi
if (( guess < 1 )); then
     echo "Your guess is lower then 1, try again..."

fi
if (( guess > 100 )); then
     echo "Your guess is higher then 100, try again..."
     continue
fi
# rest of your script

Вы можете использовать:

typeset -i guess
read -r guess

, но это преобразует любой вход в номер без проверки ошибок. Если вы введете blabla, guess будет просто 0, без проверки ошибок.

0 голосов
/ 26 февраля 2020

Я бы перевернул тест и использовал шаблон с подстановочными знаками (globbing), чтобы проверить, содержит ли переменная недопустимый символ:

if [[ $guess == *[^0-9]* ]]
then
  echo Value is not an natural number
elif ((guess == 0 || guess > 100))
  echo Value is out of range
else
  ... do your game here
fi
...