Forum Programmation.shell scripting bash

Posté par .
Tags :
0
14
mai
2012

bonjour,

voila, je n'ai absolument aucune connaissance en scripting bash, mais malgré tout j'ai besoin de faire un script qui serait sous cette forme :

si $a et $b = $c alors faire ceci
sinon faire ceci

en fait je n'arrive pas a trouver comment faire le et . d’après ce que j'ai pu trouver il faudrait utiliser & mais il manque de guillemets quelque part apparemment mais je n'arrive pas a savoir où les placer. je galère un peux, si quelqu'un pouvais m'aiguiller :)

  • # lire la doc, trouver des exemples sur le web

    Posté par . Évalué à 3.

    premier lien renvoyé par la recherche suivante dans un moteur de recherche americain dont le nom en francais serait jumelles : script bash et condition

    http://www.linuxtutorialblog.com/post/tutorial-conditions-in-bash-scripting-if-statements

    ca parle justement des conditions (IF) et des options and/or

    • [^] # Re: lire la doc, trouver des exemples sur le web

      Posté par . Évalué à 0.

      merci pour le lien, il y a pas mal de chose. mais il n'y a rien concernant ce que je recherche. il y a beaucoup de trucs pour comparer par exemple $a et $b mais ce n'est pas exactement ce que je souhaiterais faire

      • [^] # Re: lire la doc, trouver des exemples sur le web

        Posté par (page perso) . Évalué à 4.

        Pourtant, d'après ton message, on comprend que tu veux comparer $a, $b et $c. Soit tu n'as pas bien compris le lien, soit tu t'es mal exprimé.

        « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

        • [^] # Re: lire la doc, trouver des exemples sur le web

          Posté par . Évalué à 0.

          il for probable vu mon experience en la matiere que je me soit mal exprimé je te l'acorde.
          seulement dans le liens que tu donne je ne vois que la comparaisont entre deux variables (variable ?). moi j'ai besoin de faire une comparaison entre 3 :

          si la premiere ET la deuxieme = a la troisieme alors tatati tatata.

          • [^] # Re: lire la doc, trouver des exemples sur le web

            Posté par . Évalué à 3.

            si la premiere ET la deuxieme = a la troisieme alors tatati tatata.

            qui s'ecrit en algorythmie
            si (( premiere = troisieme ) ET ( deuxieme = troisieme ))
            alors blablabla

            et qui ensuite se traduit en code par des operations connues

            • [^] # Re: lire la doc, trouver des exemples sur le web

              Posté par . Évalué à 0.

              en fait j'ai fait comme ça:

              si [[ premier & "deuxieme" = troisieme ]] ;alors …

              ça semble fonctionner. j'ai pris exemple la dessus en fait:

              if [[ $num -eq 3 && "$stringvar" == foo ]]; then

              • [^] # Re: lire la doc, trouver des exemples sur le web

                Posté par (page perso) . Évalué à 1.

                Ca peux aussi s'écrire pour mettre en avant les deux conditions de manière séparée, moi je préfère je trouve cela plus lisible mais chacun fait comme il veux einh…

                if [ premier ] && [ "deux" == "trois" ]; then
                blabla

                Fuse : j'en Use et Abuse !

              • [^] # Re: lire la doc, trouver des exemples sur le web

                Posté par . Évalué à 3.

                si [[ premier & "deuxieme" = troisieme ]] ;alors …

                en fait il faut que tu saches ce que tu veux comparer.

                là tu dis que tu compares l'egalité deuxieme/troisieme
                et que tu fais un ET avec l'existence de premier.

                ce qui fait que tu aurais vrai si :
                - premier different de 0 (0 equivaut à faux dans les tests logiques)
                - deuxieme different de troisieme

            • [^] # Re: lire la doc, trouver des exemples sur le web

              Posté par . Évalué à -1.

              j'ai voulu essayer ta méthode, qui me paraissais plus claire, mais malheureusement ça ne fonctionne pas. les parenteses il n'en veux pas, j'ai essayé de remplacer par les crochets mais c'est pas mieux. par contre ce que j'ai fait semble fonctionner. je crois que je vais rester la dessus. en gros, je recupere la date du jour (troisieme) et je dis:
              si le "premier" fichier et le "deuxieme" fichier ont la meme date que la date du jour (troisieme) alors affiche ok sinon affiche pas ok.

              • [^] # Re: lire la doc, trouver des exemples sur le web

                Posté par . Évalué à 3.

                si le "premier" fichier et le "deuxieme" fichier ont la meme date que la date du jour (troisieme) alors affiche ok sinon affiche pas ok.

                sauf que de la maniere dont tu as ecrit le code plus haut tu ne fais finalement que :

                si (vrai et date_2e = date_jour) alors OK
                sinon pas ok

                moi je t'ecris la logique en francais (on appelle ca de l'algorytmie : decrire ton probleme et le decomposer en action plus simple)

                et je te proposais de tester :

                si ( date_1e = date_jour ) ET (date_2e = date_jour)
                alors ok
                sinon pas ok

                pour bien etre sur de faire le test sur les deux objets à tester (date_1e et date_2e)

                c'est exactement ce qui est fait dans l'exemple que tu as utilisé

                if [[ $num -eq 3 && "$stringvar" == foo ]]; then
                
                

                qui se traduit en "francais" par :

                si ($num egal 3) ET ($stringvar = foo) alors …

              • [^] # Re: lire la doc, trouver des exemples sur le web

                Posté par (page perso) . Évalué à 2.

                Fais attention l'orthographe pique les yeux.

                Système - Réseau - Sécurité Open Source

            • [^] # Re: lire la doc, trouver des exemples sur le web

              Posté par . Évalué à 2.

              On peut trouver l'algorithme un peu lourd, puisqu'on explicite deux fois "troisieme". Il existe une alternative pour les langages de plus haut niveau qui peuvent comparer des vecteurs, par exemple en R:

              deuxpremiers <- c(premier, deuxieme)
              if (all(deuxpremiers == troisieme)) 
              alors blabla
              
              

              Ceci dit, ça implique exactement le même nombre d'opérations.

              • [^] # Re: lire la doc, trouver des exemples sur le web

                Posté par (page perso) . Évalué à 1.

                Après on peut utiliser un langage de niveau encore un peu plus élevé :

                (if (= premier deuxieme troisieme)
                   blabla)
                
                
                • [^] # Re: lire la doc, trouver des exemples sur le web

                  Posté par . Évalué à 2.

                  Après, c'est une question de sémantique. Si la question c'est de comparer deux nombres A et B à 0, alors

                  if ((A == 0) && (B == 0))

                  me semble acceptable. Si la question est de comparer trois nombres A, B et C, alors je trouverais une formulation telle que:

                  if (A == B == C)

                  bien plus intuitive.

                  • [^] # Re: lire la doc, trouver des exemples sur le web

                    Posté par (page perso) . Évalué à 1.

                    Je répondais à la question de comparer trois nombres A, B et C comme indiqué dans le message juste au dessus. Après c'est juste une question de notation préfix, infix ou postfix. Mais c'est vrai qu'il faut faire un peu de gymnastique pour changer de notation.

        • [^] # Re: lire la doc, trouver des exemples sur le web

          Posté par . Évalué à 1.

          bon j'ai de la m… dans les yeux. je viens de retourner sur la page et je tombe pile poile sur ce que je cherche. merci encore pour le liens ;)

          ps: et ça fonctionne maintenant ;)

  • # HS

    Posté par . Évalué à 5.

    Ça ne vous arrive jamais d'oublier l'espace qui suit le [ ou précède ] et de chercher pendant cinq minutes pourquoi votre script se vautre comme une loutre bourrée au kérosène sur une plage bretonne un soir de passage de l'Amoco Cadiz?

    Depending on the time of day, the French go either way.

    • [^] # Re: HS

      Posté par . Évalué à 4.

      Oui, pendant plusieurs années… j'avais aussi essayé la technique « on met des espaces partout » qui foire à la première affectation variable = contenu.

      Mais maintenant, ça va mieux. Disons qu'il faut bien comprendre le mécanisme de parsing opéré par le shell pour ne plus se planter.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.