0
#!/bin/bash
CHECKUSER=$(grep "$USER" /var/log/string.log)
if [[ $CHECKUSER == "" ]];
   then
        echo  "Please enter y or n? (y/n)?"
        read string
        if [ "$string" = "y" -o "$string" = "n" ];
           then
              {
              echo "$USER - $string" >> /var/log/string.log
              }
           else
              while [ "$string" != "y" -o "$string" != "n" ];
                 do
                 echo "'$string' is an invalid option, please enter y or n: "
                 read string
              done
        fi
elif [[ $CHECKUSER == "$USER - n" ]];
   then
        echo "User selected n"
elif [[ $CHECKUSER == "$USER - y" ]];
   then
        echo "You've already said that you would like your account backed up."
else echo "User entered something other than y or n"
fi

这一切都很好!但是,如果您输入的不是 y|n,您就会陷入无限循环。

有任何想法吗?

4

2 回答 2

4

你必须改变

while [ "$string" != "y" -o "$string" != "n" ];

while [ "$string" != "y" -a "$string" != "n" ];

因为否则它总是正确的:

if string="y" ----------> [ false -o true  ] == [ true ]
if string="n" ----------> [ true  -o false ] == [ true ]
if string="whatever" ---> [ true  -o true  ] == [ true ]
于 2013-04-04T15:06:34.763 回答
2

在这个 while 循环中有两个问题:

while [ "$string" != "y" -o "$string" != "n" ];
do
    echo "'$string' is an invalid option, please enter y or n: "
    read backup
done

正如 fedorqui 指出的那样,您的测试始终是正确的,但即使您修复了该问题,您也将循环,因为您正在读取backup而不是string。将内容更改为:

while [ "$string" != "y" -a "$string" != "n" ];
do
    echo "'$string' is an invalid option, please enter y or n: "
    read string
done
于 2013-04-04T16:25:14.113 回答