2013-11-27 24 views
22

Tôi gõ mã giống như The Linux Command Line: A Complete Introduction, trang 369 nhưng nhắc các lỗi:Cú pháp lỗi gần dấu hiệu bất ngờ 'rồi'

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

mã giống như:

#!/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 

Tôi muốn nhận ra những gì đã giới thiệu lỗi? Làm cách nào tôi có thể sửa đổi mã? Hệ thống của tôi là Ubuntu.

Trả lời

48

Phải có một khoảng trống giữa if[, như thế này:

#!/bin/bash 
#test file exists 

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

Những (và sự kết hợp của họ) tất cả sẽ là sai quá:

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

Những mặt khác tất cả đều ok:

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

Btw đây là tương đương:

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

Đây cũng là tương đương:

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

Và, phần giữa của kịch bản của bạn sẽ tốt hơn với một elif như thế này:

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

(Tôi cũng đã bỏ dấu ngoặc kép trong số echo, như trong ví dụ này chúng không cần thiết)

+0

nhận được nó, cảm ơn, giữa [và -e, E "và] tất cả đều cần không gian? –

+0

Lý do bạn cần một không gian là bởi vì [thực sự là một lệnh. Gõ 'which [' và bạn sẽ thấy nó nằm trong/bin /. Bạn có thể viết bất kỳ 'if [...]; sau đó là lệnh 'if test ...'. – Coroos

Các vấn đề liên quan