IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Structures conditionnelles dans if


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti Avatar de CaptainKrabs
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 25
    Par défaut Structures conditionnelles dans if
    Bonjour ,

    Je vous écris car en lisant un script shell, je me suis retrouvé face à 2 structures conditionnelles dont je ne comprends pas très bien la signification.

    Les voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [[! -f "$init1"]]  [[! -r "$init2"]]

    Je ne comprends pas quelles sont les conditions exprimées au travers de " ! -r". Il me semble que "! -f" permet vérifier l'absence d'un fichier....

    Pourriez-vous m'éclairer s'il vous plaît ?

    Bien cordialement,

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par CaptainKrabs Voir le message
    Je ne comprends pas quelles sont les conditions exprimées au travers de " ! -r". Il me semble que "! -f" permet vérifier l'absence d'un fichier....
    -f => vérifie si le fichier existe et qu'il est de type "fichier régulier". D'après les lois de De Morgan, ! -f => vérifie si le fichier n'existe pas ou qu'il n'est pas de type régulier. [ ! -f /tmp ] renverra vrai alors que "/tmp" existe.
    -r => vérifie si le fichier existe et qu'il est lisible. D'après les mêmes lois, ! -r => vérifie si le fichier n'existe pas ou qu'il n'est pas lisible
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 289
    Par défaut
    Bonjour

    Citation Envoyé par CaptainKrabs Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [[! -f "$init1"]]  [[! -r "$init2"]]
    Je vais encore passer pour le vieux ronchon, mais cette ligne ne veut rien dire. Déjà, il manque des espaces autour des doubles crochets. Une erreur confirmée par le message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -bash: [[! : commande introuvable
    De plus, on voit deux propositions qui ne sont articulés par aucun opérateur logique ("Et", "ou inclusif", "ou exclusif",etc). On peut imaginer que l'opérateur manquant est un "ou". Car, si le premier fichier d'initialisation n'existe pas, ou si le second fichier d'initialisation est illisible, alors on lève une exception ou une erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          -f FILE        True if file exists and is a regular file.
          -r FILE        True if file is readable by you.
    Le point d'exclamation est, ici, l'opérateur logique unaire de la négation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [[ ! -f "$init1" ]] || [[ ! -r "$init2" ]]; then echo erreur; else echo OK; fi
    Les doubles crochets sont-ils vraiment utiles ici ? Des simples suffisent.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [ ! -f "$init1" ] || [ ! -r "$init2" ]; then echo erreur; else echo OK; fi
    Et on peut même supprimer la séparation entre les commandes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [ ! -f "$init1" -o ! -r "$init2" ]; then echo erreur; else echo OK; fi

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [[ ! -f "$init1" || ! -r "$init2" ]]; then echo erreur; else echo OK; fi
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre averti Avatar de CaptainKrabs
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 25
    Par défaut
    Merci pour vos réponses. Effectivement j'ai mal recopié la ligne (il manquait des espace et l'opérateur ||).

    J'aurais cependant une dernière question. Sauriez-vous où je peux trouver les différents tests possibles répertoriés (-f, -r, -x, ...) et leurs significations.

    Je pense que cela doit exister dans le manuel linux ("man" ou "apropos") mais je ne trouve pas la page.

  6. #6
    Membre émérite
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2012
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2012
    Messages : 381
    Par défaut
    Bonjour,

    C'est dans la page de manuel de Bash, section Expressions conditionnelles

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    ou help test
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 289
    Par défaut
    Et de manière générale :
    • help affiche l'aide pour les commandes intégrées bash (built-in), comme "test", "read", "echo", "help", etc.
    • man affiche l'aide pour les commandes extérieures, comme "grep", "sed", "find", "bash" (et oui ! ), "man", etc.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegExp] structures conditionnelles dans les RegExp
    Par Erwan.L dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/05/2010, 17h33
  2. structure conditionnelle dans la clause where
    Par liberty74 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 31/05/2007, 23h18
  3. [Language][Compilateur]Objets et structures conditionnelles
    Par goran kajfes dans le forum Langage
    Réponses: 5
    Dernier message: 30/11/2005, 22h55
  4. Réponses: 2
    Dernier message: 28/09/2005, 09h47
  5. [VB.NET] Affichage conditionnel dans un repeater
    Par NicoNGRI dans le forum ASP.NET
    Réponses: 4
    Dernier message: 07/02/2005, 12h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo