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

Unix Discussion :

Que signifie cette ligne de Shell Script?


Sujet :

Unix

  1. #1
    Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Novembre 2015
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 156
    Points : 52
    Points
    52
    Par défaut Que signifie cette ligne de Shell Script?
    Bonsoir!

    J'ai un shell script à décoder pour la rentrée:

    Je sais que le tout renvoit les noms des fichiers standards (i.e. fichier texte) du répertoire courant dont le nombre de caractères est inférieur à la valeur passée en paramètre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    t=$(ls)
    for i in $t
    do if  [ -f $i ]
    then
    if [ $(expr $(cat $i | wc -c) - $1) \< 0 ]
    then
    echo  $i
    fi
    fi
    done
    Je comprends très bien jusqu'à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [ $(expr $(cat $i | wc -c) - $1) \< 0 ]
    Ou là je suis un peu perdu... Pouvez vous m'aider? Je pense qu'il y a une soustraction qui se cache quelque part...

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    faire un LS sur une variable est une horreur pour ne pas dire une erreur...

    mais tant que c'est pour apprendre à la limite...

    --------------

    bref ton if [ $(expr $(cat $i | wc -c) - $1) \< 0 ] signifie quand à lui si resultat_expression < à zéro

    l'expression est un calcul a - b
    ou
    a est le nombre de ligne du fichier representé à l'instant T par $i (là encore faire un cat .... | wc est une bétise parce que wc fichier le fera en un seul processus)
    et b vaut $1 c'est à dire le premier parametre passé au script.


    en clair

    si ( nombre_ligne_fichier - valeur_parametre) < à_zero ) .... est la traduction de ta ligne.


    je te fais un exemple minimaliste sur le comptage des lignes par fichiers d'une liste | comparés au parametre donné au script.
    2lignes comparé à 1 donnera >
    3 lignes comparés à 3 donnera < ou =



    un exemple avec 4 fichier bidons ... pour t'aider à mieux faire tes premiers scripts
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    francois@baal:~/tmp$ cat > go.sh
    #!/bin/bash
    if [ $1 == "" ] ; then
            echo $0 demande un paramètre chiffré pour
            echo comparaison
            exit 1
    fi
    # eviter que l'utilisateur fasse planter le programme
    for i in t?t? ; do 
            nligne=$(wc -l $i|cut -d " " -f1)
            # ne recuperer que le nombre
            if [ $nligne -gt $1 ] ; then
                    echo "$i > $1 lignes"
            else
                    echo "$i <= $1 lignes"
            fi
    done
    exit 0
    francois@baal:~/tmp$ chmod +x ./go.sh
    francois@baal:~/tmp$ ./go.sh 2                                                
    tata > 2 lignes
    titi <= 2 lignes
    toto > 2 lignes
    tutu > 2 lignes
    francois@baal:~/tmp$ cd ..
    francois@baal:~$ rm -rf tmp
    francois@baal:~$
    je te laisse adapter à ton envie/besoin

  3. #3
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 294
    Points : 12 770
    Points
    12 770
    Par défaut
    Bonjour,

    Juste une petite remarque, les cat fichier| wc -c ou wc -c fichier | cut -d " " -f1 peuvent largement être remplacés par un simple wc -c <fichier
    Cordialement.

  4. #4
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 249
    Points : 13 472
    Points
    13 472
    Par défaut
    Bonjour

    Tu vois bien que c'est le code du prof. Il ne se conteste pas.

    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Novembre 2015
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 156
    Points : 52
    Points
    52
    Par défaut
    Merci beaucoup frp!

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

Discussions similaires

  1. Que signifie cette ligne de code ?
    Par ysahel dans le forum Débuter
    Réponses: 3
    Dernier message: 22/01/2010, 13h07
  2. Que signifie cette commade sed ?
    Par karimspace dans le forum Administration système
    Réponses: 1
    Dernier message: 24/08/2006, 19h39
  3. Que signifie cette erreur de compilation ?
    Par Premium dans le forum C
    Réponses: 14
    Dernier message: 22/05/2006, 23h16
  4. [SQL-Server] 'Bad column offset' que signifie cette erreur ?
    Par dor_boucle dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 08/02/2006, 15h01
  5. [SQL][DERBY] Que signifie cette erreur ?
    Par irenee dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/12/2005, 14h34

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