Я получаю эту ошибку, когда пытаюсь запустить свой сценарий оболочки:
ОШИБКА: строка 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
Почему я получаю ошибка?
Как уже упоминал Шили , сценарий оболочки 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
).
Пустые команды не допускаются, поэтому просто удалите строку else
.