Pętla, aż użytkownik naciśnie „C” w pliku sh

0

Chcę, co następuje:

Na początku, gdy użytkownik uruchamia plik .sh, wyświetla następujące informacje:

Review id:
You id is:XXX000YYY
Do you want to change it?[Press Y to change, C to continue]:

Teraz Jeśli użytkownik naciśnie, Ypozwól mu zmienić identyfikator i ponownie pokaż to ponownie, i rób to, dopóki użytkownik nie naciśnie, Caby kontynuować. Jak mogę to zrobić w skrypcie powłoki?


Próbowałem śledzić, ale nie wiem, co napisać, jeśli warunki ???

while :
do
  echo "Enter id:"
  read line
  echo "Your id: $line"
  echo "Do you want to change(Y to change, C to conntinue)?"
  read ans
  if [ $ans = C ] || [ $ans = c ]; then
  /// .... finish the loop
  elif [ $ans = y ] || [ $ans = Y ]; then
  /// .... continue while loop
  else
  echo "Wrong selection."
  /// .... continue while loop
  fi
exit 0

Zmieniłem to na następujące, ale teraz jest w nieskończonej pętli:

echo "Enter id:"
read line
echo "Your id: $line"
echo "Do you want to change(Y to change, C to conntinue)?"
read ans
while [ $ans = y ] || [ $ans = Y ];:
do
  echo "Enter id:"
  read line
  echo "Your id: $line"
  echo "Do you want to change(Y to change, C to conntinue)?"
  read ans
done
Harry Joy
źródło
1
Przewodnik zaawansowanego skryptu BASH może pomóc ci rozszyfrować, od czego zacząć
uSlackr
Gdzie napisał warunek w oświadczeniu while?
Harry Joy,
Zaktualizowałem pytanie, próbując. Czy możesz mi pomóc w ifczęściowym napisaniu?
Harry Joy,
1
To może lepsze pytanie dla unix.stackexchange.com
chrisjlee,

Odpowiedzi:

0

Problem leży w tej linii:

while [ $ans = y ] || [ $ans = Y ];:

które powinno być

while [ $ans = y ] || [ $ans = Y ];

Problem polega na tym, że dwukropek jest wbudowany w bash, który jest interpretowany jako true. Więcej informacji na stronie Jaki jest cel wbudowanego GNU Bash `: '(dwukropek)? .

Poniższy kod działa dla mnie

#!/bin/env bash
echo "Enter id:"
read line
echo "Your id: $line"
echo "Do you want to change(Y to change, C to conntinue)?"
read ans
while [ $ans == y ] || [ $ans == Y ] ;
do
echo "ANS: ${ans}"
  echo "Enter id:"
  read line
  echo "Your id: $line"
  echo "Do you want to change(Y to change, C to conntinue)?"
  read ans
done

Uwaga: zawsze lepiej jest dołączyć shebang na górze swoich skryptów.

Karolos
źródło