2013-11-27 3 views
22

Я набрал код так же, как The Linux Command Line: A Complete Introduction, стр 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.

ответ

48

Там должно быть пространство между 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 

И, средняя часть вашего сценария была бы лучше с elif как это:

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

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

+0

получил, спасибо, между [и -e, E "и] все требуют пространства? –

+0

Причина, по которой вам нужно пространство, потому что [на самом деле является командой. Введите 'which [' и вы увидите, что он находится в/bin /. Вы можете написать любой 'if [...]; то 'команда как' if test ... '. – Coroos

Смежные вопросы