8
votes

Plusieurs opérateurs unaires dans une déclaration IF

est-il possible d'avoir plusieurs opérateurs unaires en si des déclarations .. Voici le code de code qui me donne une erreur.

Veuillez corriger le code ici. P>

if [ -f $input_file ] -a [ -f $output_file ] -a [ -f $log_file ] ]
then
    ### Some Code here
fi


0 commentaires

4 Réponses :


10
votes
if [ -f "file1" -a -f "file2" -a "file3" ]; then
   #some code
fi

1 commentaires

Cela fonctionne comme une magie .. Merci pour la réponse rapide ..



1
votes

[ code> est une commande, ne faisant pas partie de la déclaration si code>. En tant que tel, vous devriez le transmettre chacun des arguments appropriés au lieu d'essayer de l'exécuter de manière incorrecte comme vous l'avez.

if [ arg1 arg2 arg3 arg4 ... ]
then


2 commentaires

Dans les environnements Cygwin, il y a un C: \ Cygwin \ bin \ [. Exe. Un sentiment vraiment étrange de jeter un coup d'œil à ce dossier pour la première fois.


Commande similaire [ dans / usr / bin sur la plupart des distributions Linux, malgré laquelle [ est généralement un bâtiment intégré.



5
votes

Vous pouvez voir le [...] uniquement comme raccourci pour Test ... . Les options sont utilisées de la même manière.

Donc, dans votre cas, vous pouvez écrire le ghostdog74 manière ou: xxx


1 commentaires

Il est important de placer des variables à l'intérieur des citations doubles à l'intérieur [...] pour empêcher les intérieurs de la fractionnement de mots ainsi que la possibilité de variables évaluant à rien. Cependant, les guillemets doubles sont facultatifs à l'intérieur du [[...]] de bash-spécifique .



8
votes

Si vous utilisez la double crochet de Bash, vous pouvez le faire:

if [[ -f "$input_file" && -f "$output_file" && -f "$log_file" ]]


1 commentaires

Il n'est pas nécessaire de citer des variables contenant des noms de fichiers si vous utilisez un double support car Bash ne fait pas de coller avec deux crochets. Voir myWiki.woolgedge.org/bashfaq/031