Ecrire un script shell

Résolu/Fermé
sisimouhamed - 3 mai 2009 à 01:22
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 4 mai 2009 à 10:40
Bonjour,
je voudrai savoire le code source d'un programme shelle qui reçoit plusieurs chaines de caractere et affiche si elles correspondent à un nom de login ou non.Merci de m'aider je compte sur vous
A voir également:

6 réponses

jivef Messages postés 927 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 12 novembre 2020 306
3 mai 2009 à 04:42
Salut,

Quelle sera l'entrée des arguments ?
Entrée standard (clavier) ou redirecteur avec un fichier ?
Dans le cas du clavier, tu peux utiliser read.
echo -e "Veuillez saisir le code utilisateur en minuscules. (chiffres autorisés.) \c"
utilisateur=$utilisateur
read utilisateur
echo "$utilisateur"

ensuite, tu teste la présence de la variable $utilisateur dans /etc/passwd en précisant même que la ligne commence par $utilisateur:
Tu auras donc quelque chose comme "^$utilisateur:" dans ton test.
Ce sera la ligne suivante :

grep "^$utilisateur:" /etc/passwd

sachant que lorsque la commande réussi et que la chaine est trouvée, le $? est égal à 0 et quand la commande échoue le $? est en général 1 (en tout cas toujours différent de 0)

Donc pour savoir si ton grep a fonctionné, utilise la commande "test" dans un "if"
Ca donnera quelque chose comme
if test $?=0
then
echo "le compte existe"
fi

Tu peux faire l'inverse en testant que $? est différent de 0. A toi de voir.

On a globalement quelque chose qui ressemble à ça :
#!/bin/sh
# auteur : JVF
# Objet du script :
#Lecture du compte saisi au clavier. Controle de la présence du compte dans base utilisateurs unix.
# nom du script : version : date : observation
# verifuser.sh : 1.0 : 20090501: creation
######################################################################################
# Lecture des informations fournies en entree standard (clavier)
echo -e "Veuillez saisir le code utilisateur en minuscules. (chiffres autorisés.) \c"
utilisateur=$utilisateur
read utilisateur
echo "$utilisateur"
# Recherche de la variable $utilisateur dans le fichier /etc/passwd
grep "^$utilisateur:" /etc/passwd
# Analyse du code retour ($?)
if test $?=0
then
echo "le compte existe"
fi

Tu dois voir que j'ai insisté sur les commentaires, c'est une habitude à prendre...
Ensuite je voudrais que tu lises la remarque suivante :

Je ne sais pas dans quel cadre tu dois faire ce script, mais si c'est dans un cadre scolaire ou universitaire, dis-toi bien que je ne te rend pas service en te machant le travail.
Je viens de passer 10 minutes à revoir des commandes bash et ça m'a été profitable, mais par contre, toi, tu n'auras strictement rien appris.

2
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
4 mai 2009 à 10:40
Nouvelle question, nouveau sujet pour maintenir la clarté du forum ! Ouvre un nouveau fil de discussion.

Bonne chance
1
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
3 mai 2009 à 02:18
Il suffit de parcourir les arguments passés au script et de les comparer à $USER ou encore mieux, à `whoami`.
#!/bin/sh

login=`whoami`
for i in "$@"
do
    if [ "$i" = "$login" ]; then
        echo "$i est le login utilisé"
    else
        echo "$i n'est pas le login utilisé"
    fi
done

Bonne chance
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
3 mai 2009 à 20:52
Ce qui est sûr c'est que ta version est bien compliquée :-)
0
jivef Messages postés 927 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 12 novembre 2020 306
3 mai 2009 à 22:10
Bonjour,

Je pense que ta solution ne fonctionne qu'avec le login courant, or ce n'est pas exactement ce qui est demandé.


Pour rappel
"je voudrai savoire le code source d'un programme shelle qui reçoit plusieurs chaines de caractere et affiche si elles correspondent à un nom de login ou non."

Il ne s'agit donc pas de vérifier si la chaine saisie correspond au login courant (obtenu par whoami) mais de vérifier si la chaine saisie est bien dans la base des comptes unix (/etc/passwd)

Je ne suis pas un cador, mon script peut-être amélioré en permettant la saisie de plusieurs chaines de caractères, pour l'instant tel qu'il est écrit il faut le faire un par un, mais ce ne serait pas grand chose de le modifier.
Cependant il va bien vérifier que la chaine saisie correspond à un compte unix.

On pourrait très bien compléter ma solution avec ta boucle for qui permettrait de lire chaque argument et de répondre si le compte existe ou pas.

Apparemment, je peux compter sur toi.

A bientux.
Jonas.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
4 mai 2009 à 01:03
Ah oui exact j'avais mal lu. Effectivement dans ton cas, la méthode est la bonne. Merci de ta vigilance !

Pour la lecture des arguments passés au script, il suffit de reprendre la boucle que j'ai indiqué. Bref en mixant nos deux codes on obtient ce qu'il faut, mais on va lui laisser le soin de chercher ;-)
0
sisimouhamed
4 mai 2009 à 02:39
Merci pour tout mais existe t-il une commande shelle qui calcule le nombre de fois de repetition d'un mots das un fichier exemple:si dans un fichier ona 3 fois le mot manger et 6 fois le mot boire le script affiche :3 manger
6 boire.Si oui pouvez vous m'aidez?
0