Je souhaite saisir le nom d'un répertoire et vérifier s'il existe. S'il n'existe pas, je veux créer mais j'obtiens l'erreur mkdir: cannot create directory'./' File exists
Mon code dit que le fichier existe même s'il ne l'est pas. Qu'est-ce que je fais mal?
echo "Enter directory name"
read dirname
if [[ ! -d "$dirname" ]]
then
if [ -L $dirname]
then
echo "File doesn't exist. Creating now"
mkdir ./$dirname
echo "File created"
else
echo "File exists"
fi
fi
if [ -L $dirname]
Regardez le message d'erreur produit par cette ligne: "[: manquant"] "" ou quelque chose comme ça (selon le Shell que vous utilisez). Vous avez besoin d'un espace à l'intérieur des supports. Vous avez également besoin de guillemets doubles autour de l'expansion des variables, sauf si vous utilisez des crochets doubles; vous pouvez soit apprendre les règles , soit utiliser une règle simple: toujours utiliser des guillemets autour de la substitution de variable et de la substitution de commande - "$foo"
, "$(foo)"
.
if [ -L "$dirname" ]
Ensuite, il y a une erreur logique: vous ne créez le répertoire que s'il existe un lien symbolique qui ne pointe pas vers un répertoire. Vous vouliez probablement avoir une négation là-dedans.
N'oubliez pas que le répertoire peut être créé pendant l'exécution de votre script, il est donc possible que votre vérification montre que le répertoire n'existe pas, mais le répertoire existera lorsque vous essayez de le créer. Ne faites jamais "vérifiez puis faites", faites toujours "faites et rattrapez l'échec" .
La bonne façon de créer un répertoire s'il n'existe pas est
mkdir -p -- "$dirname"
(Les guillemets doubles dans le cas où $dirname
Contient des espaces ou des caractères globbing, le --
Dans le cas où il commence par -
.)
Essayez ce code:
echo "Enter directory name"
read dirname
if [ ! -d "$dirname" ]
then
echo "File doesn't exist. Creating now"
mkdir ./$dirname
echo "File created"
else
echo "File exists"
fi
Journal de sortie:
Chitta:~/cpp/Shell$ ls
dir.sh
Chitta:~/cpp/Shell$ sh dir.sh
Enter directory name
New1
File doesn't exist. Creating now
File created
chitta:~/cpp/Shell$ ls
New1 dir.sh
Chitta:~/cpp/Shell$ sh dir.sh
Enter directory name
New1
File exists
Chitta:~/cpp/Shell$ sh dir.sh
Enter directory name
New2
File doesn't exist. Creating now
File created
Chitta:~/cpp/Shell$ ls
New1 New2 dir.sh
essaye ça: ls yourdir 2>/dev/null||mkdir yourdir
, qui est minuscule et concis et remplit votre tâche.
read -p "Enter Directory Name: " dirname
if [[ ! -d "$dirname" ]]
then
if [[ ! -L $dirname ]]
then
echo "Directory doesn't exist. Creating now"
mkdir $dirname
echo "Directory created"
else
echo "Directory exists"
fi
fi