Оператор Case, вложенный в цикл While, приводит к бесконечному циклу в скрипте BASH

Оператор Case, вложенный в цикл While, приводит к бесконечному циклу в скрипте BASH

Я пытаюсь сделать так, чтобы этот скрипт BASH требовал от пользователя ввода значения от 1 до 4 для выбора черепашки-ниндзя в операторе case. Любое другое значение приведет к тому, что $COUNTER останется равным 0, поэтому оператор case придется выполнить снова. Однако я попадаю в бесконечный цикл, если ввожу любое значение, отличное от 1 до 4.

1-й — Как вложить оператор case в цикл while?

2-й - Как сделать так, чтобы этот скрипт требовал от пользователя ввода значения от 1 до 4?

#!/bin/bash                                    

echo "What is your favorite Ninja Trutle?"     

echo "1 - Raphael."                            
echo "2 - Leonardo."                           
echo "3 - Michelangelo"                        
echo "4 - Donatello"                           

read TURTLE;                                   
COUNTER=0;                                     

while [ $COUNTER -eq 0 ]                       
do                                             
   $COUNTER=$(( $COUNTER + 1 ))                

   case $TURTLE in                             
      1) echo "Raphael is cool, but rude.";;   
      2) echo "Leonardo leads.";;              
      3) echo "Michelangelo is a party dude.";;
      4) echo "Donatello does machines.";;     
      *) echo "Did you even watch the show?"   
         $COUNTER=0                            
         ;;                                    
   esac                                        
done

Спасибо за любую оказанную помощь.

решение1

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

COUNTER=$(( $COUNTER + 1 ))

и

COUNTER=0

Кроме того, поскольку caseкоманда находится внутри whileцикла, я предполагаю, что вы хотите снова запросить пользователя, если он введет недопустимое значение. Если это так, вы должны поместить оператор также readвнутри цикла.while

Связанный контент