aide sur comparaison et condition en shell
Bonjour,
Voici mon probleme:
C'est de la programmation shell sous linux redhat 5 ES.
A la base il y a 2 fichiers param_user et param_carac. Et un script en shell, qui une fois exécuté, collectera des infos du 1er et 2eme fichiers et les mettra en sortie dans un fichier passwd.
# param_user contient les lignes ecrit comme ceci = login:Id:groupe_service (7 groupes services total)
exemple = toto:900:admin , seulement 3 colonnes par lignes
# param_carac contient Id:groupe_archi:groupe_service:etc ...
ou groupe_service:group_archi: etc ...
//il n'y a que 3 groupe architecture A , B et C
// il peut y avoir 6 colonnes max
// autant de ligne que d'utilisateur (50)
exemple = 800:A:admin:etc...
500:B:reseau:etc...
223:A:etude:etc...
900:A:admin:etc...
500:C:admin:etc...
admin:C:etc...
etude:B:etc...
lorsque que j'executerai le script ./script toto group_service
exemple (et seulement de cette maniere ci, avec 2 arguments)
==> ./script toto admin
reprenons maintenant les exemples comme énoncés.
Le programme doit chercher l'Id (donc 900, id de toto) dans le premier fichier param_user et le compare avec les id du 2eme fichier param_carac.
# etape 1 :Si c'est le meme id, on copie la ligne du fichier param_carac où l'Id a été trouvé et on le renvoie dans un fichier nommé passwd
# etape 2 : si il ne le trouve pas le meme id, on compare désormais le groupe_service du user situé dans param_user donc ici admin et effectuer le meme procédé que l'étape 1
Pouvez vous me donner les idées de départ ? pour que je puisse effectuer le programme .
je ne vois pas comment 1) associer toto à l'id, faut il que toto et id soit dans la meme ligne ?
2) étape 1 comparer $1(entrer en paramètre) à une donnée d'un fichier
3) étape 2 comparer $2(entrer en paramètre) apres avoir montrer que étape 1 ne donnait rien
4) probleme se situant au niveau de la comparaison en shell
je vois comment -le renvoyer dans un fichier >> passwd
-choisir une ligne avec colonne grep nom |-d ":" -f1
- effectuer une boucle if
merci de votre aide
enfin ! mais encore souci
Apres avoir testé, réessayer, exécuté de nombreuses fois , ca marche !
mais le souci c'est le contenu du fichier passwd. Une fois les 2 lignes détécter et copier dans le fichier, elles apparaissent comme ceci :
toto:800:admin
800:trt:/home/test
je voudrais qu'elles soient en une seul ligne mais je ne trouve pas
pourtant "$d $p " >>passwd devrait les mettre en ligne ?
remarque : ce n'est pas grave si l'ID apparait 2 fois ou autre donnée redondantes, car pour la suite de mon programme j'effacerai le fichier.
Code:
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 29 30 31 32 33 34 35 36 37 38 39 40
| ./script toto
#!/bin/bash
If [ $# -ne 1 ] ; then
Echo Usage : $0 [nom] [service];
Exit 2 ;
fi
// Etape 1 : chercher si login existe dans param_user, si oui on stock la ligne dans passwd et passe etape 2
Si non login inexistant
P=`grep c ^$1: param_user`
If [ $p = 1 ]
Then
P=`cat param_user | grep ^$1: ` // une fois trouvé on garde la ligne A
// Etape 2 : cherche à comparer lid de toto dans param_user au fichier param_carac
Si identique, on copie la ligne du fichier param_carac et on met dans >>passwd
Si non on compare désormais le service (dev) et effectue etape 2
info=`grep "^$1:" param_user` // cherche login dans param_user
if test -n "$info"
then
id=`echo "$info" | cut -f2 -d ":"` //cherche lid se trouvant dans la ligne param_user
c=`grep -c "$id" param_carac` // on prend la ligne la ligne où se trouve lid dans le fichier param_carac
if [ "$c" = "1" ]
then
c=`grep "$id" param_carac `
echo « $p : $c » >>passwd
fi
Else
Echo erreur ! cet utilisateur est inexistant
fi |