Commande introuvable en Bash if-ELSE condition lors de l'utilisation de [! -d “$DIR”]
J'ai un code comme celui-ci
#!/bin/bash
DIR="test_dir/";
if [! -d "$DIR"]; then
# If it doesn't create it
mkdir $DIR
fi
Mais pourquoi l'exécution, il m'a donné ceci:
./mycode.sh: line 16: [!: command not found
Quelle est la bonne façon de le faire?
Le nom
[
est le nom d'une commande, non aléatoire de la ponctuation. Tout comme vous avez besoin d'un espace entre cat
et /etc/passwd
dans cat/etc/passwd
, si vous avez besoin d'un espace entre [
(le nom de la commande) et !
(l'un de ses arguments). De même, le dernier argument doit être ]
. Cette exigence remonte à l'histoire ancienne (7ème Édition UNIX™ de 1978, ou plus tôt) lorsque le shell n'ont pas de test
(aka [
) intégré et la seule test
commande a été /bin/test
et son (dur) lien /bin/[
.
OriginalL'auteur neversaint | 2013-08-08
Vous devez vous connecter pour publier un commentaire.
Ajouter de l'espace entre [ et !. Et avant d'].
C'est aussi une bonne idée de citer votre variable:
OriginalL'auteur konsolebox
Ajouter certains espaces:
OriginalL'auteur falsetru
Vous pourrait aussi tenter d'en disant simplement:
Cela permettrait de créer le répertoire s'il n'existe pas.
mkdir -p "$DIR"
(en utilisant le haut-cas nom dans la question). Cela crée tous les répertoires nécessaires sur le chemin, mais réussit si le répertoire existe déjà.Yup,
mkdir -p foo
par lui-même ne fait pas de mal.OriginalL'auteur devnull