2013-08-08 11 views
8

Ho un codice come questo

#!/bin/bash 
DIR="test_dir/"; 
if [! -d "$DIR"]; then 
    # If it doesn't create it 
    mkdir $DIR 
fi 

Ma perché l'esecuzione mi ha dato questo:

./mycode.sh: line 16: [!: command not found 

Qual è il modo giusto per farlo?

+3

Il nome '[' è il nome di un comando, non punteggiatura casuale. Proprio come è necessario uno spazio tra 'cat' e'/etc/passwd' in 'cat/etc/passwd', quindi è necessario uno spazio tra' ['(il nome del comando) e'! '(Uno dei suoi argomenti) . Allo stesso modo, l'ultimo argomento deve essere ']'. Questo requisito risale alla storia antica (settima edizione UNIX ™ circa 1978, o precedente) quando la shell non aveva un 'test' (noto anche come' [') built-in e l'unico comando' test' era '/ bin/test 'e il suo (difficile) link'/bin/['. –

risposta

19

Aggiungere spazio tra [e!. E prima] pure.

#!/bin/bash 
DIR="test_dir/"; 
if [ ! -d "$DIR" ]; then 
    # If it doesn't create it 
    mkdir $DIR 
fi 

E 'anche una buona idea per citare la variabile:

mkdir "$DIR" 
8

aggiungere alcuni spazi:

if [ ! -d "$DIR" ]; then 
# ^  ^
1

Si potrebbe anche tentare di semplicemente dicendo:

test -d "${dir}" || mkdir "${dir}" 

Questo creerebbe la directory se non esiste

+3

Oppure, ancora più semplice: 'mkdir -p" $ DIR "' (usando il nome in maiuscolo come nella domanda). Ciò crea tutte le directory necessarie sul percorso, ma ha esito positivo se la directory esiste già. –

+0

@JonathanLeffler Yup, 'mkdir -p foo' da solo non fa male. – devnull

Problemi correlati