<Précédent | Table des matières | Suivant>
Expressions de fichier
Les expressions suivantes sont utilisées pour évaluer l'état des fichiers :
Tableau 27-1 : expressions de fichier de test
L'expression est vraie si :
L'expression est vraie si :
file1 -si file2 file1 et file2 ont les mêmes numéros d'inode (les deux
les noms de fichiers font référence au même fichier par un lien en dur).
file1 -NT file2 file1 est plus récent que file2.
file1 -pas file2 file1 est plus ancien que file2.
-b filet filet existe et est un fichier (de périphérique) spécial bloc.
-c filet filet existe et est un fichier de caractère spécial (périphérique).
-d filet filet existe et est un répertoire.
-e filet filet existe.
-f filet filet existe et est un fichier régulier.
-g filet filet existe et est set-group-ID.
-G filet filet existe et appartient à l'ID de groupe effectif.
-k filet filet existe et a son ensemble "sticky bit".
-L filet filet existe et est un lien symbolique.
-O filet filet existe et appartient à l'ID utilisateur effectif.
-p filet filet existe et est un tube nommé.
-r filet filet existe et est lisible (a l'autorisation de lecture pour l'utilisateur effectif).
-s filet filet existe et a une longueur supérieure à zéro.
-S filet filet existe et est une prise réseau.
-t fd fd est un descripteur de fichier dirigé vers/depuis le terminal. Cela peut être utilisé pour déterminer si l'entrée/sortie/erreur standard est redirigée.
-u filet filet existe et est setuid.
-w filet filet existe et est accessible en écriture (a l'autorisation d'écriture pour l'utilisateur effectif).
-x filet filet existe et est exécutable (a l'autorisation d'exécution/recherche pour l'utilisateur effectif).
Ici, nous avons un script qui illustre certaines des expressions de fichier :
#! / Bin / bash
# test-file : évalue le statut d'un fichier FILE=~/.bashrc
if [ -e "$FILE" ]; alors
if [ -f "$FICHIER" ]; alors
echo "$FILE est un fichier normal."
fi
if [ -d "$FILE" ]; alors
echo "$FILE est un répertoire."
fi
if [ -r "$FILE" ]; alors
echo "$FILE est lisible."
fi
if [ -w "$FILE" ]; alors
echo "$FILE est accessible en écriture."
fi
if [ -x "$FILE" ]; alors
echo "$FILE est exécutable/recherchable."
#! / Bin / bash
# test-file : évalue le statut d'un fichier FILE=~/.bashrc
if [ -e "$FILE" ]; alors
if [ -f "$FICHIER" ]; alors
echo "$FILE est un fichier normal."
fi
if [ -d "$FILE" ]; alors
echo "$FILE est un répertoire."
fi
if [ -r "$FILE" ]; alors
echo "$FILE est lisible."
fi
if [ -w "$FILE" ]; alors
echo "$FILE est accessible en écriture."
fi
if [ -x "$FILE" ]; alors
echo "$FILE est exécutable/recherchable."
fi d'autre
echo "$FILE n'existe pas" exit 1
fi
sortie
fi d'autre
echo "$FILE n'existe pas" exit 1
fi
sortie
Le script évalue le fichier affecté à la constante DOSSIER et affiche ses résultats au fur et à mesure de l'évaluation. Il y a deux choses intéressantes à noter à propos de ce script. Tout d'abord, remarquez comment le paramètre $FICHIER est cité dans les expressions. Cela n'est pas nécessaire pour compléter syntaxiquement l'expression, c'est plutôt une défense contre le fait que le paramètre soit vide. Si l'expansion des paramètres de $FICHIER si cela aboutissait à une valeur vide, cela provoquerait une erreur (les opérateurs seraient interprétés comme des chaînes non nulles plutôt que comme des opérateurs). L'utilisation des guillemets autour du paramètre garantit que l'opérateur est toujours suivi d'une chaîne, même si la chaîne est vide. Deuxièmement, notez la présence du sortie commande vers la fin du script. Les sortie La commande accepte un seul argument facultatif, qui devient l'état de sortie du script. Lorsqu'aucun argument n'est passé, l'état de sortie est par défaut l'état de sortie de la dernière commande exécutée. À l'aide de sortie permet ainsi au script d'indiquer l'échec si $FICHIER se développe au nom d'un fichier inexistant. Les sortie La commande apparaissant sur la dernière ligne du script est là comme une formalité. Lorsqu'un script « s'exécute jusqu'à la fin » (atteint la fin du fichier), il se termine avec un état de sortie de la dernière commande exécutée.
De même, les fonctions shell peuvent renvoyer un état de sortie en incluant un argument entier au retourner commander. Si nous devions convertir le script ci-dessus en une fonction shell pour l'inclure dans un programme plus vaste, nous pourrions remplacer le sortie commandes avec retourner instructions et obtenez le comportement souhaité :
fichier_test () {
# test-file : évalue le statut d'un fichier FILE=~/.bashrc
if [ -e "$FILE" ]; alors
if [ -f "$FICHIER" ]; alors
echo "$FILE est un fichier normal."
fi
if [ -d "$FILE" ]; alors
echo "$FILE est un répertoire."
fi
if [ -r "$FILE" ]; alors
fichier_test () {
# test-file : évalue le statut d'un fichier FILE=~/.bashrc
if [ -e "$FILE" ]; alors
if [ -f "$FICHIER" ]; alors
echo "$FILE est un fichier normal."
fi
if [ -d "$FILE" ]; alors
echo "$FILE est un répertoire."
fi
if [ -r "$FILE" ]; alors
echo "$FILE est lisible."
fi
if [ -w "$FILE" ]; alors
echo "$FILE est accessible en écriture."
fi
if [ -x "$FILE" ]; alors
echo "$FILE est exécutable/recherchable."
fi
d'autre
echo "$FILE n'existe pas" return 1
fi
}
echo "$FILE est lisible."
fi
if [ -w "$FILE" ]; alors
echo "$FILE est accessible en écriture."
fi
if [ -x "$FILE" ]; alors
echo "$FILE est exécutable/recherchable."
fi
d'autre
echo "$FILE n'existe pas" return 1
fi
}