CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Besoin d'aide programmation bash

Selrahc282
Selrahc282
Niveau 10
17 mars 2012 à 00:36:30

Bonjour, alors voilà, je dois faire un programme qui permet de rechercher le nom complet d'un utilisateur dont on ne connait que le nom de login ou en partie le nom de login. Du coup, il faut chercher dans /etc/passwd. Il faut rentrer le nom de login en paramètre pour que le programme le cherche. J'ai commencé à faire le programme, mais il ne marche pas et j'ai beau cherché je ne trouve aucune solution.

  1. !/bin/bash

AFF=""

for i in $#;
do
if [ $# == 0 ]
then echo "Erreur de paramètre(s): arg1 arg2 arg3
else
echo $#
AFF=$AFF$(grep $i /etc/passwd | cut -d: -f 5)
echo $AFF
fi
done

Voilà, quand je cherche quelque chose avec le programme, il me rentre vraiment n'importe quoi dedans, pourtant ma commande est valide et quand je mets un seul paramètre il me met plein de truc dans ma chaine et si je met deux arguments, il me met juste deux truc. J'ai beau cherché et cherché, je trouve pas c'est quoi le problème, donc si quelqu'un qui est expérimenté pourrait m'aider ça serait vraiment sympa.

Merci. :)

Selrahc282
Selrahc282
Niveau 10
17 mars 2012 à 00:38:27

Désolé pour le deuxième post, quand je dis qu'il me rentre n'importe quoi dedans, je veux dire qu'il va pas me trouver les bon truc, si je rentre "popo" comme paramètre, il va me trouver par exemple bin, daemon, etc qui n'a pas rapport avec ce que je cherche.

godrik
godrik
Niveau 30
17 mars 2012 à 17:06:45

bash c'est mal. Fait du sh pour ces choses la.

$i n'est pas ce que tu crois ici. Je te laisse chercher dans le manuel la syntaxe correcte.

Selrahc282
Selrahc282
Niveau 10
17 mars 2012 à 18:18:06

Wow merci pour ta réponse qui m'aide ÉNORMÉMENT... :honte:

godrik
godrik
Niveau 30
17 mars 2012 à 19:59:08

Pourtant c'est exactement ton probleme. Que penses tu que c'est $i ?Qu'est ce que tu veux que ca soit?

j3r3mux
j3r3mux
Niveau 10
18 mars 2012 à 18:05:42

Bien sûr que ça réponse aide, relis ton code et/ou ton cours.

Selrahc282
Selrahc282
Niveau 10
20 mars 2012 à 20:50:24

Désolé pour la réponse limite agressive, j'avais pas de patience quand je l'ai écris. :hap:

Mon problème c'était mon "for". Il fallait mettre "for i in $*".

j3r3mux
j3r3mux
Niveau 10
20 mars 2012 à 21:48:07

T'inquiète c'est pas grave, il y a des jours comme ça.
C'est la correction de l'enseignant ? de toi ? En me basant sur ce que t'as fait j'aurais plus écris ça:

  1. !/bin/bash

if [ $# == 0 ]
then echo "Erreur de parametre: arg1 arg2 arg3"
else
echo $#
for i in $*
do
AFF=$(grep $i /etc/passwd | cut -d: -f 5)
echo -e "\n"$AFF
done
fi

DN4
DN4
Niveau 7
21 mars 2012 à 02:58:38

Voici le code en pur bash. Il affiche la partie de login passé en argument, suivi du nom ou des noms correspondants, avec leur login respectif entre parenthèses.

Par exemple, en passant « jo ro » en arguments, la sortie est :

jd: John Doe (jdoe), John Deo (jdeo)
ro: root (root)

  1. !/bin/bash

if ((! $#)); then
    echo "error: no login or login's part(s) given." >&2
    exit 1
fi

declare -A names

while IFS=: read -r login _ _ _ name _; do
    for arg; do
        if [[ $login = *"$arg"* ]]; then
            names["$arg"]+="$name ($login), "
        fi
    done
done < <(getent passwd)

for k in "${!names[@]}"; do
    printf '%s: %s\n' "$k" "${names[$k]%,*}"
done

DN4
DN4
Niveau 7
21 mars 2012 à 03:00:18

« jd ro », pas « jo ro ». :p)

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment