Expression (Shell -script)

Bonsoir,

J'aurais besoin d'aide pour l'eclaircissement de ce test:

if

En fait je ne comprend pas en particulier ce que j'ai mis en gras, je remercie d'avance tous ceux qui prendront du temps pour m'expliquer un peu l'expression !

Merci d'avance
Configuration: Mac PowerPC
Firefox 2.0.0.1

9 réponses

  1. Donc si je résume :

    -lt (inférieur)

    -le (inférieur ou égale)

    De quelle manière teste t'on :

    superieur et superieur ou égale ?

    Encore une fois merci d'être là !
    5
    1. Modérateur
      Re-

      -lt = plus petit que (less than)
      -le = plus petit ou égal (less or equal)
      -ne = pas égal à (not equal)
      -gt = plus grand que (greater than)
      -ge = plus grand ou égal (greater or equal)

      Tiens je crois que ça te sera très utile : http://abs.traduc.org/abs-4.2.01-fr/
      Si la traduction n'est pas terminée, se rabattre vers la version antérieure : http://abs.traduc.org/abs-4.1-fr/

      La VO : https://tldp.org/LDP/abs/html/
      0
  2. Modérateur
    Salut,

    il n'en manque pas un bout ???

    ;-)))
    1
    1. Ok, je viens de comprendre, tous shell-script est lancée dans un sous shell, et ne peut donc pas modifier le shell parent, en revanche la command source permet de modifier le shell courant !

      Ca c'est bon à savoir, je te remercie pour l'explication avec les scripts !
      1
      1. Modérateur
        Copier/Coller de l'expression de momsse...

        Note : L'espace entre les 2 crochets fermants de l'expression est à supprimer. Il n'est ici que pour palier au désagrément de certaines balises de mise en forme du site CCM.
        if [[ ( $(wc -l < $2) -lt $1 ) || ( $1 -le 0 ) ] ] 

        0
        1. Modérateur
          Re-

          Apparemment on teste ( [[ ) que la valeur du résultat du nombre de ligne (wc -l) contenu dans le fichier passé en paramètre ($2) est inférieur (-lt) au 1er paramètre ($1), et dans le cas contraire (||) on teste si le 1er paramètre est inférieur ou égal à zéro (-le).
          0
          1. Merci !

            Je n'arrive pas à comprendre le résultat de ce script (donnée en exercice)

            #!/bin/sh
            
            mkdir $1
            cd $1


            Théoriquement il est censé crée un repertoire avec comme nom pour s'y deplacer, en pratique il ne fait que le creer et ne s'y déplace pas...

            C'est pourtant un script simple !
            0
            1. comprendre "avec comme nom le premier argument"
              0
          2. Modérateur
            Jette un oeil aux sous-shells.
            0
            1. Je ne comprend pas vraiment, je pense avoir compris le mécanisme de sous-shell, hors ici, je n'utilise pas de parenthèse donc, en théorie cela devrait modifier le bahs courant, de plus, le script semble équivalent à la commande suivante:

              $ mkdir toto; cd toto

              Comment faudrait-il appeler mon script pour qu'il ,puisse fonctionner ?

              Merci de ton aide !
              0
              1. Modérateur
                Re-

                Pour bien comprendre le mécanisme, crées ces 2 petits scripts :
                script 1
                #! /bin/bash
                # foo.sh
                
                echo -e "Répertoire actuel :\c "
                pwd
                echo
                {
                echo -e "Création du répertoire $1\n"
                mkdir $1
                echo -e "Déplacement dans le répertoire $1\n"
                cd $1
                }
                echo -e "Nous sommes dans le répertoire :\c "
                pwd
                echo -e "\nBye bye."
                
                script 2
                #! /bin/bash
                # bar.sh
                
                echo -e "Répertoire actuel :\c "
                pwd
                echo
                (
                echo -e "Création du répertoire $1\n"
                mkdir $1
                echo -e "Déplacement dans le répertoire $1\n"
                cd $1
                )
                echo -e "Nous sommes dans le répertoire :\c "
                pwd
                echo -e "\nBye bye."
                
                et lances-les respectivement comme suit :
                sh foo.sh mon_rep
                source foo.sh mon_rep
                sh bar.sh
                source bar.sh
                entre chaque commande n'oublie pas de détruire "mon_rep" ou alors change de nom de répertoire à chaque fois ;-))

                la commande "source" (voir le man bash) peut aussi s'écrire "." :
                source foo.sh
                est équivalent à :
                . foo.sh
                Pour voir directement le paragraphe concernant la commande "source" dans le man bash tapes :
                man bash -P 'less -p "^       source"'
                ;-))
                0