0

I have made a script for an ordering system. I am currently stuck on trying to make my while loop work. For example at the end I would like the script to ask the user if they would like to place another order and if so it should loop back to the start. Additionally, if invalid input is entered it should loop back to where the input is asked for. for example at I attempted to do this between line 9 and 23 for but was not able to get the while loop to work here.

#!/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
3
  • sscce.org Commented Apr 19, 2020 at 22:38
  • You might want to use the select statement. Commented Apr 19, 2020 at 22:43
  • the select command does not help me in the situation as I would like the loop to return me to the start however I do not really understand how to do this Commented Apr 19, 2020 at 23:05

1 Answer 1

2

Fixed your script to break out of loop when entry is valid.

#!/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
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.