Синтаксическая ошибка в `fi 'после' else '

Я получаю эту ошибку, когда пытаюсь запустить свой сценарий оболочки:

ОШИБКА: строка 13: синтаксическая ошибка рядом с неожиданным токеном `fi '

Сценарий:

case $# in
0) echo Usage is: $0 filename [filename]
  exit;;
*);;
esac

for i in $*
do
   if test -f $i;
   then
      echo $i
      cat $i
   else
fi
done

Почему я получаю ошибка?

-1
09.08.2016, 16:17
2 ответа

Как уже упоминал Шили , сценарий оболочки bash (который выглядит очень похоже) не допускает пустых блоков между , если и либо else , elif или fi , или между else или elif и соответствующими fi . (Это сводится к следующему: каждое условное выражение должно делать что-то.)

Вы можете либо удалить оператор else , либо, если хотите, чтобы это было позже, поместите в него фиктивную команду блок else . Например, вы можете переписать свой сценарий следующим образом:

case $# in
0) echo Usage is: $0 filename [filename]
  exit;;
*);;
esac

for i in $*
do
   if test -f $i;
   then
      echo $i
      cat $i
   else
      true
   fi
done

(Я также сделал отступ fi , чтобы он соответствовал if . Это вопрос стиля, но я лично считаю его гораздо легче читать таким образом.)

true имеет своей единственной целью вернуть успешный статус выхода, но это команда, поэтому этот сценарий ничего не сделает, если имя в $ i не относится к простому файлу ( test -f ).

3
28.01.2020, 05:07

Пустые команды не допускаются, поэтому просто удалите строку else .

1
28.01.2020, 05:07

Теги

Похожие вопросы