Vérifier si un répertoire existe et est accessible
Je veux vérifier si un répertoire existe et qu'il a des droits d'accès; si c'est le cas, effectuez les tâches. C'est le code que j'ai écrit, qui pourraient ne pas avoir la bonne syntaxe.
Pouvez-vous m'aider à la corriger?
dir_test=/data/abc/xyz
if (test -d $dir_test & test –x $dir_test -eq 0);
then
cd $dir_test
fi
Je crois que cela peut aussi être écrit comme ceci.
dir_test=/data/abc/xyz
test -d $dir_test
if [ $? -eq 0 ];
then
test –x $dir_test
if [ $? -eq 0 ];
then
cd $dir_test
fi
fi
Comment peut-on écrire cela de manière plus efficace?
Parce que
Plus d'exemples et d'explications ici: Comment vérifier si un répertoire existe dans un script shell
[
... ]
est synonyme de test
cette classe comme un inutile l'utilisation de test
😉 Voir @chepner pour l'explication.Plus d'exemples et d'explications ici: Comment vérifier si un répertoire existe dans un script shell
OriginalL'auteur Rahul sawant | 2014-03-24
Vous devez vous connecter pour publier un commentaire.
La meilleure façon d'écrire l'original
test
à base de solution seraitbien qu'allez-vous faire si le test échoue et vous ne pas modifier les répertoires? Le reste du script sera probablement pas fonctionner comme prévu.
Vous pouvez le raccourcir à l'aide de la
[
synonyme detest
:ou vous pouvez utiliser le conditionnel de commande fourni par
bash
:La meilleure solution, étant donné que vous allez changer les répertoires si les tests réussissent, c'est simplement de essayer, et l'annuler si elle échoue:
Rien suite à l'
||
est évalué si lecd
réussit.Eu Merci beaucoup
Alternative:
(cd "$dir_test" || exit; ...)
. Utiliser @chepner exemple si vous modifiez les variables et ils ont besoin de persister.OriginalL'auteur chepner
cd
pouvez-vous dire si un répertoire est accessible. Il suffit de neMême si vous décidez de l'utiliser
test
tout d'abord, pour une raison quelconque, vous devez encore vérifier le statut de sortie decd
, de peur que vous avez une condition de course.OriginalL'auteur kojiro
sinon, si vous avez /usr/bin/cd:
[ -d $dir_test ] && [ -x $dir_test ]
en place de la-a
de l'opérateur.OriginalL'auteur Joshua