2013-11-27 37 views
22

ho digitato il codice la stessa The Linux Command Line: A Complete Introduction, pagina 369 ma richiede l'errore:Errore di sintassi nei pressi di token imprevisto 'poi'

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

il codice è simile:

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

voglio rendersi conto di cosa ha introdotto l'errore? Come posso modificare il codice? Il mio sistema è Ubuntu.

risposta

48

Ci deve essere uno spazio tra if e [, in questo modo:

#!/bin/bash 
#test file exists 

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

Questi (e le loro combinazioni) sarebbero tutti errato troppo:

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

Questi d'altra parte va tutto bene:

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

Btw questi sono equivalenti:

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

Questi sono anche equivalenti:

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

E, la parte centrale del vostro script sarebbe stato meglio con una elif come questo:

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

(Ho anche lasciato cadere le virgolette nello echo, poiché in questo esempio non sono necessarie)

+0

capito, grazie, tra [e -e, E "e] tutti richiedono spazio? –

+0

Il motivo per cui hai bisogno di uno spazio è perché [è in realtà un comando. Digita 'which [' e vedrai che è in/bin /. Puoi scrivere qualsiasi 'if [...]; quindi' comando come 'se test ...'. – Coroos

Problemi correlati