Продолжайте получать "Иначе: endif not found."ошибка - PullRequest
0 голосов
/ 11 апреля 2019

Это приглашение для моего скрипта: Сценарий, который спрашивает пользователя «Ты в порядке?»

Если пользователь отвечает y или Y, то скажите «рад слышать это», если пользователь вводит n илиN затем напечатайте «извините, что вы плохо себя чувствуете»Если пользователь вводит какой-то другой символ, напечатайте неправильный выбор и снова задайте вопрос.

Вот что у меня есть:

#! /bin/csh
echo "Are you OK? "
set n = $<
set loop = 1
if (("$n" == "y") || ("$n" == "Y")) then
    echo "glad to hear it"
else if (("$n" == "n") || ("$n" == "N")) then
    echo "sorry that you are not feeling good"
else
    echo "in-correct choice"
    while ( $loop == 1 )
      echo "Are you OK? "
      set n = $<
      if (("$n" == "y") || ("$n" == "Y")) then
        echo "glad to hear it"
        set loop = 0
      else if (("$n" == "n") || ("$n" == "N")) then
        echo "sorry that you are not feeling good"
        set loop = 0
      else
        echo "in-correct choice"
      endif
    end
endif

Я получаю сообщение об ошибке "else: endif notнайденный."Также эхо-строка «рад слышать это» запускается каждый раз, независимо от того, введен ли пользователь правильно или нет.Пожалуйста помоги.Спасибо

1 Ответ

2 голосов
/ 13 апреля 2019

Просто добавьте новую строку после вашего последнего оператора endif:

...
    end
endif
#new line

Или я рекомендую всегда заканчивать csh-скрипты статусом выхода, и вы должны хорошо идти:

...
    end
endif
exit (0)

В любом случае, здесь также есть небольшая перезапись вашего скрипта:

#!/bin/env csh
while (1)
  echo "Are you OK?"
  set n = "$<"
  if (("$n" == "y") || ("$n" == "Y")) then
    echo "glad to hear it"
    break
  else if (("$n" == "n") || ("$n" == "N")) then
    echo "sorry that you are not feeling good"
    break
  else
    echo "in-correct choice"
  endif
end
exit (0)
  • set n = $< здесь опасность лучше set n = "$<" чтобы не справиться, например строка y abc как да
...