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

Синтаксическая ошибка рядом с неожиданным токеном 'then'

Я набрал код так же, как Командная строка Linux: полное введение, стр. 369 но подскажите ошибку:

line 7 `if[ -e "$FILE" ]; then`

код выглядит следующим образом:

#!/bin/bash
#test file exists

FILE="1"
if[ -e "$FILE" ]; then
  if[ -f "$FILE" ]; then
     echo :"$FILE is a regular file"
  fi
  if[ -d "$FILE" ]; then
     echo "$FILE is a directory"
  fi
else 
   echo "$FILE does not exit"
   exit 1
fi
   exit

Я хочу понять, что привело к ошибке? Как я могу изменить код? Моя система - Ubuntu.

4b9b3361

Ответ 1

Между if и [ должно быть пробел, например:

#!/bin/bash
#test file exists

FILE="1"
if [ -e "$FILE" ]; then
  if [ -f "$FILE" ]; then
     echo :"$FILE is a regular file"
  fi
...

Эти (и их комбинации) тоже были бы неверными:

if [-e "$FILE" ]; then
if [ -e"$FILE" ]; then
if [ -e "$FILE"]; then

С другой стороны, все в порядке:

if [ -e "$FILE" ];then  # no spaces around ;
if     [    -e   "$FILE"    ]   ;   then  # 1 or more spaces are ok

Btw они эквивалентны:

if [ -e "$FILE" ]; then
if test -e "$FILE"; then

Они также эквивалентны:

if [ -e "$FILE" ]; then echo exists; fi
[ -e "$FILE" ] && echo exists
test -e "$FILE" && echo exists

И средняя часть вашего script была бы лучше с elif следующим образом:

if [ -f "$FILE" ]; then
    echo $FILE is a regular file
elif [ -d "$FILE" ]; then
    echo $FILE is a directory
fi

(Я также сбросил кавычки в echo, так как в этом примере они не нужны)