Вы можете удалить повторяемость, используя цикл для
. См. https://www.gnu.org/software/bash/manual/html_node/Looping-Constructs.html
Вот что я придумал:
#!/bin/bash
read -p "Input the range you want to practice. For example: 1-12, 4-9, 9-11: " range
QUESTIONS=0
CORRECT=0
for i in {1..5}; do
let QUESTIONS++
n1=$(shuf -i $range -n 1)
n2=$(shuf -i $range -n 1)
realans=$((n1 * n2))
read -p "${n1} x ${n2}? " ans
if [[ $ans -eq $realans ]]; then
let CORRECT++
echo "Correct! ${n1} x ${n2} is ${realans}."
else
echo "Incorrect. ${n1} x ${n2} is ${realans}."
fi
done
echo "You got ${CORRECT} out of ${QUESTIONS} questions correct!"
Я упростил программу и выбрал читаем
вместо zentity
для простоты и для сохранения и ввода, и вывода в терминале. Я также продемонстрировал использование let var ++
, который является более чистым и современным способом увеличения счетчика.
Для печати только 23
из выводаgyro 23
Вариант 1:Использование sed для печати только числовых значений.
mosquitto_sub -v -h 127.0.0.1 -p 1883 -t 'gyro' | sed 's/[^0-9]//g'
Вариант 2:Использование awk для печати второго поля, которое23
mosquitto_sub -v -h 127.0.0.1 -p 1883 -t 'gyro' | awk '{print $2}'