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 :

Commande débutant - BASH


Sujet :

Shell et commandes GNU

  1. #21
    Membre éprouvé Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 346
    Points : 977
    Points
    977
    Par défaut
    Donc il faut que tu mettes done <<< "$donnee" dans ton code en #13.

  2. #22
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 279
    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 279
    Points : 12 727
    Points
    12 727
    Par défaut
    Perso, je n'approuve pas du tout cette pratique, car c'est un pur bashisme déjà, et surtout pour une raison de sécurité: le fichier, ici ne fait que quelques lignes, mais essayez avec un fichier de 10 millions de lignes. Je pense que vous avez le temps d'aller discuter à la machine à café avant qu'il n'affiche la première ligne, et seulement si l'admin ne vous poursuit pas dans les couloirs avant
    Cordialement.

  3. #23
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 26
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par balkany Voir le message
    Donc il faut que tu mettes done <<< "$donnee" dans ton code en #13.
    Toujours le même problème ça ne calcul que la première ligne.


    Je pense que vous avez le temps d'aller discuter à la machine à café avant qu'il n'affiche la première ligne, et seulement si l'admin ne vous poursuit pas dans les couloirs avant
    C'est une bonne occasion d'aller prendre un café alors

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 551
    Points : 19 385
    Points
    19 385
    Par défaut
    tu as essayé ma dernière proposition pour lire le fichier ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #25
    Membre éprouvé Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 346
    Points : 977
    Points
    977
    Par défaut
    Citation Envoyé par azier Voir le message
    Toujours le même problème ça ne calcul que la première ligne.
    Ah ben je sais pas alors, mais de toutes façons il vaudrait mieux que tu utilises une substitution de processus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while read line # La boucle while va permettre de lire le fichier ligne par ligne
    do
        ./affichersigne $line
    done < <(cut -d ":" -f1,2,3 $1 | sed 's/:/ /g')

  6. #26
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 279
    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 279
    Points : 12 727
    Points
    12 727
    Par défaut
    Non, sérieusement, une façon plus propre mais toujours du bashisme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #Programme principal
    if [ $# -ne 1 ]; then
    	aide
     
    elif [ $# -eq 1 ]; then
     
    while read line # La boucle while va permettre de lire le fichier ligne par ligne
    do
        ./affichersigne $line
    done < <(cut -d ":" -f1,2,3 $1 | sed 's/:/ /g')
    Pas testé, mais attention, il faut absolument un espace entre les 2 chevrons, donc < <( et pas <<(.

    PS: je suppose que le code que tu as fourni n'est pas complet, car je ne vois pas la fin du if.
    Cordialement.

  7. #27
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 26
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    tu as essayé ma dernière proposition pour lire le fichier ?
    Yes, ça revoie la réponse que de la première ligne du .txt. Idem
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    done < <(cut -d ":" -f1,2,3 $1 | sed 's/:/ /g')

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 551
    Points : 19 385
    Points
    19 385
    Par défaut
    ces commandes sont inutiles : read peut lire ces données en assignant plusieurs variables, par exemple* :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    line='Galle:Martin:12-2-1989:rue du casino:Uriage-les-Bains:38000'; echo "$line" | { IFS=':-' read prenom nom jour mois reste; printf '%s\n' "$prenom" "$nom" "$jour" "$mois";}
    ou un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "$line" | { IFS=':-' read -a tableau; printf '%s\n' "${tableau[@]::4}";}
    --
    * ici, pour la démonstration je fais un echo, et read ; printf dans une liste de commande.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #29
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 279
    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 279
    Points : 12 727
    Points
    12 727
    Par défaut
    Comment lances-tu ton script sur la machine en question ?

    Que donne la commande:
    Et est-ce que tu as vérifié que le script affichesigne est bien le même que celui que tu utilise sur ta propre machine ?
    Cordialement.

  10. #30
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 26
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Comment lances-tu ton script sur la machine en question ?

    Que donne la commande:
    Et est-ce que tu as vérifié que le script affichesigne est bien le même que celui que tu utilise sur ta propre machine ?
    Oui, c'est le même
    UTF-8 Unicode text

    Je testerai ça demain N_BaH

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ while IFS=':' read a b c d;do j=${c%%-*};m=${c#*-};m=${m%-*};echo $m $j;done <personnes.txt
    2 12
    9 14
    3 13
    11 19
    12 22
    10 24
    Simples affectations ? Non ? (Après, facile d'ajouter, ou non, un zéro, un appel de fonction, etc )




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ line='Galle:Martin:12-2-1989:rue du casino:Uriage-les-Bains:38000'; echo "$line" | { IFS=':-' read prenom nom jour mois reste; printf '%s\n' "$prenom" "$nom" "$jour" "$mois";}
    Galle
    Martin
    12
    2
    $ line='Galle:Jean-Claude:12-2-1989:rue du casino:Uriage-les-Bains:38000'; echo "$line" | { IFS=':-' read prenom nom jour mois reste; printf '%s\n' "$prenom" "$nom" "$jour" "$mois";}                                                                          
    Galle
    Jean
    Claude
    12
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 551
    Points : 19 385
    Points
    19 385
    Par défaut
    aïe ! j'avais anticipé Jean-Marc, mais pas Jean-Claude.

    donc, en fait, il vaut mieux effectuer un Remplacement de paramètre (IFS='-' read -a jmY <<<"$date") postérieurement.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  13. #33
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 26
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ while IFS=':' read a b c d;do j=${c%%-*};m=${c#*-};m=${m%-*};echo $m $j;done <personnes.txt
    2 12
    9 14
    3 13
    11 19
    12 22
    10 24
    Simples affectations ? Non ? (Après, facile d'ajouter, ou non, un zéro, un appel de fonction, etc )
    Yes ça marche nickel, merci en tout cas. Besoin de faire 2 3 petits réglages quand le mois ou le jours sont incohérent genre le mois = 13 et ça devrait être bon.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Citation Envoyé par azier Voir le message
    genre le mois = 13
    Euh... tu as bien compris que "m" est le mois et "j" le jour ? Il n'y a pas de mois à 13.
    Le vrai problème est que la concaténation des deux nécessite un zéro pour les jours avec un seul chiffre.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  15. #35
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 26
    Points : 9
    Points
    9
    Par défaut
    oui, mais si le .txt contient par exemple :
    Lucien:Martin:12-13-1989:rue du casinoaris:75016

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    oui, mais si le .txt contient par exemple :
    Si les entrées, pour ton script, comme pour tous les logiciels du monde, ne respectent pas le format idoine, alors on peut mettre tous ces programmes à la poubelle.
    Pourquoi vérifierais-tu que le mois ne dépasse pas 13 plus que le format de date, ou la présence d'un "\0" en plein milieu de ligne, ou que le fichier existe ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  17. #37
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 26
    Points : 9
    Points
    9
    Par défaut
    C'est pas faux effectivement.

  18. #38
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 279
    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 279
    Points : 12 727
    Points
    12 727
    Par défaut
    Pour le fun:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ cat personnes.txt 
    Galle:Martin:12-2-1989:rue du casino:Uriage-les-Bains:38000
    Goudy:Debby:14-9-1990:avenue des cheveux raides:Paris:75002
    Pleur:Jean:13-3-1994:rue de la poisse:Grenoble:38000
    Prane:Dolly:19-11-1995: place de la pharmacie:Grenoble:38100
    Mieu:Jeff-Edmond:22-12-1992:sentier des efforts:Grenoble:38000
    Honnete:Marie:24-10-1982:boulevard Guignol:Paris:75003
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ cat signe.bash 
    #!/bin/bash
    Jmax="20:19:20:20:21:21:22:23:23:23:22:21"
    Signe1="Capricorne:Verseau:Poissons:Belier:Taureau:Gemeaux:Cancer:Lion:Vierge:Balance:Scorpion:Sagittaire:Capricorne"
    while IFS=":" read a b c d
    do
    	IFS="-" read j m y <<<$c
    	i=$(cut -d\: -f $m <<<$Jmax)
    	n=0
    	[[ $i -le $j ]] && n=1
    	echo $a $b $c $(cut -d\: -f $((m+n)) <<<$Signe1)
    done <personnes.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ ./signe.bash 
    Galle Martin 12-2-1989 Verseau
    Goudy Debby 14-9-1990 Vierge
    Pleur Jean 13-3-1994 Poissons
    Prane Dolly 19-11-1995 Scorpion
    Mieu Jeff-Edmond 22-12-1992 Capricorne
    Honnete Marie 24-10-1982 Scorpion
    PS: Ici, je n'utilise pas de tableau volontairement suite indication donné dans le post initial.
    Cordialement.

  19. #39
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Pour le fun:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ ./signe.bash 
    Galle Martin 12-2-1989 Verseau
    Goudy Debby 14-9-1990 Vierge
    Pleur Jean 13-3-1994 Poissons
    Prane Dolly 19-11-1995 Scorpion
    Mieu Jeff-Edmond 22-12-1992 Capricorne
    Honnete Marie 24-10-1982 Scorpion
    [HS]
    Oui, je confirme: "pour le fun" !
    J'adore le nom de tes personnes !
    [/HS]

  20. #40
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 279
    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 279
    Points : 12 727
    Points
    12 727
    Par défaut
    C'est pas de moi, mais du PO et ces "gens" habite dans une rue en rapport avec leur identité
    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Réponses: 12
    Dernier message: 26/05/2018, 11h00
  2. commande shell bash
    Par achrafkaran dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 17/12/2011, 12h30
  3. Utiliser une commande de Bash 4.0 sous Bash 3.0
    Par Yokav dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 20/05/2011, 09h29
  4. commande sed (bash)
    Par bossy451 dans le forum Linux
    Réponses: 1
    Dernier message: 28/03/2010, 18h41
  5. [débutant] [BASH] problème script backup
    Par julien.63 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 13/04/2008, 18h56

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