Подтвердить что ты не робот

Два условия, если

Я пытаюсь написать script, который будет читать два варианта, и если оба они будут "y" , я хочу сказать "Test Done!" . и если один или оба из них не будут "y" , я хочу, чтобы он сказал "Test Failed!" Вот что я придумал:

echo "- Do You want to make a choice ?"
read choice

echo "- Do You want to make a choice1 ?"
read choice1

if [ "$choice" != 'y' ] && [ "$choice1" != 'y' ]; then
echo "Test Done !"
else
echo "Test Failed !"
fi

Но когда я отвечаю на оба вопроса с "y" , он говорит "Test Failed!" вместо "Test Done!" . И когда я отвечаю на оба вопроса с "n", он говорит "Test Done!" что я сделал неправильно?

4b9b3361

Ответ 1

Вы проверяете неправильное состояние.

if [ "$choice" != 'y' ] && [ "$choice1" != 'y' ];

Вышеуказанное утверждение верно, когда choice!='y' и choice1!='y', и поэтому программа корректно печатает "Test Done!" .

Исправлено script -

echo "- Do You want to make a choice ?"
read choice

echo "- Do You want to make a choice1 ?"
read choice1

if [ "$choice" == 'y' ] && [ "$choice1" == 'y' ]; then
    echo "Test Done !"
else
    echo "Test Failed !"
fi

Ответ 2

Программа делает именно то, что вы ему сказали. Вы сказали: "Если первый выбор не равен" y ", а второй вариант не равен" y ", тогда распечатайте" Test Done! ", Иначе напечатайте" Test Failed! "- так, только если оба варианта не будут y" Test Done!" Будет напечатан.

Вероятно, вы имели в виду:

echo "- Do You want to make a choice ?"
read choice

echo "- Do You want to make a choice1 ?"
read choice1

if [ "$choice" == 'y' ] && [ "$choice1" == 'y' ]; then
echo "Test Done !"
else
echo "Test Failed !"
fi

Я изменил != не равный == равным. Теперь, только если вы ответите "y" на оба вопроса, "Test Done!" печататься.

Ответ 3

if [ "$choice" != 'y' -a "$choice1" != 'y' ]; then
    echo "Test Done !"
else
    echo "Test Failed !"
fi

Ответ 4

У вас своя логика обратная; вы проверяете!= когда вы должны проверять ==. Попробуйте следующее:

if [ "$choice" == 'y' ] && [ "$choice1" == 'y' ]; then
    echo "Test Done !"
else
    echo "Test Failed !"
fi

Ответ 5

Другая мысль,

$ c1='y' ; c2='y' ; [[ ${c1} = 'y' ]] && [[ ${c2} = 'y' ]] && echo true || echo false  
true  
$ c1='n' ; c2='y' ; [[ ${c1} = 'y' ]] && [[ ${c2} = 'y' ]] && echo true || echo false  
false  
$ c1='n' ; c2='y' ; [[ ${c1} = 'y' ]] || [[ ${c2} = 'y' ]] && echo true || echo false  
true  
$ c1='n' ; c2='n' ; [[ ${c1} = 'y' ]] || [[ ${c2} = 'y' ]] && echo true || echo false  
false  
$  

Переполнение тарабарщины. (

Ответ 6

Что делать, если вы попытались

if [[ "$choice" != 'y' && "$choice1" != 'y' ]]; then
echo "Test Done !"
else
echo "Test Failed !"
fi

Ответ 7

эта строка

if [ "$choice" != 'y' ] && [ "$choice1" != 'y' ]; then

тестирует, если оба варианта ARENT 'y', поэтому, когда оба варианта ARE 'y', утверждение ложно, и ваша программа правильно печатает "Test Failed"

Ответ 8

У вас есть логика сравнения назад; из вашего описания, которое вы хотели сказать

if [ "$choice" = 'y' ] && [ "$choice1" = 'y' ]; then

Я действительно удивлен, что && строить работы, хотя при дальнейшем осмотре он, вероятно, должен. Тем не менее, я бы написал его как

if [ "$choice" = 'y' -a "$choice1" = 'y' ]; then