То, что я хочу, заключается в следующем:

Сначала, когда пользователь запускает файл .sh, он отображает следующее:

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

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


Я пытался следовать, но не знаю, что писать, если условия ???

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

Я изменил это следующим образом, но теперь это в бесконечном цикле:

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

1 ответ1

0

Проблема заключается в этой строке:

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

который должен быть

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

Проблема в том, что двоеточие является встроенным в bash, которое интерпретируется как true . Более подробную информацию смотрите в разделе Какова цель `:'(двоеточие) GNU Bash Builtin? ,

Следующий код работает для меня

#!/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

Примечание: всегда лучше включать шебанг в верхней части ваших сценариев.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .