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, Y
pozwól mu zmienić identyfikator i ponownie pokaż to ponownie, i rób to, dopóki użytkownik nie naciśnie, C
aby 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
if
częściowym napisaniu?Odpowiedzi:
Problem leży w tej linii:
które powinno być
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
Uwaga: zawsze lepiej jest dołączyć shebang na górze swoich skryptów.
źródło