Два условия, если
Я пытаюсь написать 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!" что я сделал неправильно?
Ответы
Ответ 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