Как заставить l oop вернуться к началу и как добавить al oop в цикле - PullRequest
0 голосов
/ 20 апреля 2020

Я сделал скрипт для системы заказов. В настоящее время я пытаюсь заставить меня работать oop. Например, в конце я хотел бы, чтобы скрипт спросил пользователя, хочет ли он сделать еще один заказ, и если да, то он должен вернуться к началу. Кроме того, если введен неверный ввод, он должен l oop вернуться туда, где запрашивается ввод. например, я пытался сделать это между строками 9 и 23, но не смог заставить l oop работать здесь.

#!/bin/bash
clear

echo "orderBeds"
while :
do
read -p "Please enter your choice (Quit/Order) " order

 if [ $order == "order" ] || [ $order == "Order" ]
  then
   read -p  "Please enter your name " name


 elif [ $order == "quit" ] || [ $order == "Quit" ]
  then
  echo "-----Thanks for your purchase! -----"
   exit

 else 
    [ $order != "order" ] || [ $order != "Order" ] || [ $order != "quit" ] || [ $order != "Quit" ]
     echo "Invaild input, Please use a vauld input"

fi

read -p "Please enter your telephone number? " telephone
    if ! [[ "$telephone" =~ ^[0-9]+$ ]]
     then
      echo "Sorry integers only"
    else 
     echo $telephone
    fi

read -p "what kind of bed would you like? (Single/Double/Kingsize)" bed
    if [ $bed != "Single" ] || [ $bed != "Double" ] || [ $bed != "Kingsize" ]       
echo $bed
    then
    echo "Please enter a vaild bed Type (Single/Double/Kingsize)"
    else
    return
 fi

read -p "Would you like to place another order? (Quit/Order)" order
if [ $order == "order" ] || [ $order == "Order" ]
 then
  read -p  "Please enter your name " name


elif [ $order == "quit" ] || [ $order == "Quit" ]
 then
  echo "-----Thanks for your purchase! -----"
   exit
fi
done

1 Ответ

2 голосов
/ 20 апреля 2020

Исправлен ваш скрипт в break из l oop, когда запись действительна.

#!/usr/bin/env bash

clear

echo "orderBeds"

read -r -p "Please enter your choice (Quit/Order) " order

while :; do

  while ! [[ $order =~ ^(([Oo]rder)|([Qq]uit))$ ]]; do
    echo "Invaild input, Please use a vauld input" >&2
    read -r -p "Please enter Quit or Order) " order
  done

  if [[ -n "${BASH_REMATCH[2]}" ]]; then
    read -r -p "Please enter your name " name
  else
    echo "-----Thanks for your purchase! -----"
    exit
  fi

  echo "$name"

  while :; do
    read -r -p "Please enter your telephone number? " telephone
    [[ $telephone =~ ^[[:digit:]]+$ ]] && break
    echo "Sorry digits only" >&2
  done

  echo "$telephone"

  while :; do
    read -r -p "what kind of bed would you like? (Single/Double/Kingsize)" bed
    [[ $bed =~ ^(Single|Double|Kingsize)$ ]] && break
    echo "Please enter a valid bed Type (Single/Double/Kingsize)" >&2
  done

  echo "$bed"

  read -r -p "Would you like to place another order? (Quit/Order)" order
done
...