Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

This question already has an answer here:

I've got the basics of bash scripting (I think anyways), and i'm trying to move on to more advanced stuff.

I am trying to write a script that will perform input validation (the user must input either yes or no) and i'm trying to do this by combining a function and an if then else statement.

This is what i'm working on so far.

#!/bin/bash
func ()
{ 
    echo "Enter yes or no:"
    read var1
}

if [ $var1 != yes ] || [ $var1 != no ]
then
    func
else
    echo "I'm glag you said $var1"
fi

exit 0

I know that i'm using the wrong if then else operator/syntax, but I can't find the correct syntax threw googling.

I want it to run the function if var1 is either equal to yes or no, so the user can't input something else.

share|improve this question

marked as duplicate by slm, Anthon, Zelda, rahmu, Timo Mar 2 at 19:25

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

1  
Why if and not while to insist until the input is correct? –  manatwork Mar 2 at 17:20
    
If your script is complex enough to warrant careful input validation, it is certainly ripe for a real scripting language, like Python, Ruby, or Perl. –  vonbrand Mar 2 at 17:34
    
Agree with vonband. If you are doing something complex, try Python if it is available. Also, avoid bashisms. Use /bin/sh instead. –  Gregor Mar 2 at 18:14

2 Answers 2

I think you have some wrong logic in your script. You should refer to X Tian's link in above comment to learn more about bash.

Here's a quick fix for you script:

func() {
  echo -n "Enter yes or no: "
  read var1
}

while true; do
  func

  if [[ $var1 == "yes" ]] || [[ $var1 == "no" ]]
  then
    printf "I'm glag you said %s\n" "$var1"
    break
  fi
done

exit 0
share|improve this answer
#!/bin/bash
func()
{
    echo -n "Enter yes or no : "

    read confirmation
}   
confirmation="$(echo ${confirmation} | tr 'A-Z' 'a-z')"
if [ "$confirmation" == yes ] || [ "$confirmation" == no ]; then
    echo "I am gladd you said $confirmation"
else
    func
fi
exit 0

Hope this can help

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.