#1 Le 11/04/2012, à 13:54
- TLK x TyGeRz
Script formulaire
Bonjour aujourd'hui je dois écrire un script du genre formulaire qui permet d'afficher un menu et de saisir quelques informations sur les salariés d'une entreprise voila mon début de code:
#!/bin/bash
shopt -s extglob
fich=fichier_salaries
echo
echo " GESTION DES SALARIES"
echo
echo "1. Saisie des informations personelles d'un salarié"
echo "2. Mise à jour des informations personnelles d'un salarié"
echo "3. Consultation des informations personnelles d'un salarié"
echo "4. Consultation des informations personnelles de tous les salariés"
echo "5. Supprimer un salarié"
echo "6. Quitter l'application"
echo
echo -n "Saisir un chiffre: "
read chiffre
while ! ( [ "$chiffre" -ge 1 ] && [ "$chiffre" -le 6 ] )
do
echo "Saisie invalide"
echo -n "Veuillez saisir un chiffre entre 1 et 6: "
read chiffre
done 2>/dev/null
case $chiffre in
1)
echo
echo -n "nom: "
read nom
while [[ "$nom" != +([a-zA-Z]) ]]
do
echo "Caractère incorrecte."
echo -n "Retapez votre nom: "
read nom
done
echo -n "prenom: "
read prenom
while [[ "$prenom" != +([a-zA-Z]) ]]
do
echo "Caractère incorrecte."
echo -n "Retapez votre prenom: "
read nom
done
IFS=/
echo -n "date de naissance (forme recommandée: jj/mm/aaaa): "
read jour mois annee
while [ -z "$jour" ] || [ -z "$mois" ] || [ -z "$annee" ]
do
echo "Champs incorrects ou manquants"
echo -n "Retapez votre date de naissance sous la forme (jj/mm/aaaa): "
read jour mois annee
done
while ! ( [ "$mois" -ge 1 ] && [ "$mois" -le 12 ] )
do
echo "Saisie incorrects"
echo -n "Retapez le mois de naissance: "
read mois
done 2>/dev/null
case $mois in
1|3|5|7|8|10|12)
while ! ( [ "$jour" -ge 1 ] && [ "$jour" -le 31 ] )
do
echo "Saisie invalide"
echo -n "Veuillez retapez le jour de naissance: "
read jour
done 2>/dev/null
;;
4|6|9|11)
while ! ( [ "$jour" -ge 1 ] && [ "$jour" -le 30 ] )
do
echo "Saisie invalide"
echo -n "Veuillez retapez le jour de naissance: "
read jour
done 2>/dev/null
;;
2)
if [ $(expr $annee % 4) = 0 ]
then
while ! ( [ "$jour" -ge 1 ] && [ "$jour" -le 29 ] )
do
echo "Saisie invalide"
echo -n "Veuillez retapez le jour de naissance: "
read jour
done 2>/dev/null
else
while ! ( [ "$jour" -ge 1 ] && [ "$jour" -le 28 ] )
do
echo "Saisie invalide"
echo -n "Veuillez retapez le jour de naissance: "
read jour
done 2>/dev/null
fi
;;
esac
jour=$(sed 's/^.$/0&/' <<< "$jour") # Rajout du 0 au jour si nécessaire
mois=$(sed 's/^.$/0&/' <<< "$mois") # Rajout du 0 au mois si nécessaire
echo
echo "Date de naissance : $jour/$mois/$annee valide"
echo
echo -n "Situation familiale (C pour célibataire, D pour divorcé(e), M pour marié(e), P pour pacsé(e)):"
read situation
while [ "$situation" != C ] && [ "$situation" != D ] && [ "$situation" != M ] && [ "$situation" != P ]
do
echo -n "Saisie incorrecte. Choisir parmis la liste proposée (C, D, M, P):"
read situation
done
echo -n "Le numéro de sécurité sociale: "
read secu
while ! ( [ "$secu" = 2 ] )
do
echo "Numéro de sécurité sociale invalide"
echo -n "Veuillez le retapez: "
read secu
done 2>/dev/null
echo -n "Adresse :"
read adresse
while [ -z "$adresse" ]
do
echo "Champs obligatoire"
echo -n "Veuillez tapez une adresse valide: "
read adresse
done
echo -n "Numéro de téléphone de fixe :"
read numfix
while [ "$numfix" != [0][1][0-9][0-9][0-9][0-9] ]
do
echo "Numero de téléphone incorrect"
echo -n "Veuillez le retapez: "
read numfix
done
echo -n "Numéro de téléphone portable: "
read numpor
while [ "$numfix" != [0][6]||[0-9]||[0-9][0-9][0-9] ]
do
echo "Numero de téléphone incorrect"
echo -n "Veuillez le retapez: "
read numpor
done
if [ -f $fich ]
then
if grep "$nom, $prenom, $jour/$mois/$annee, $situation, $secu, $adresse, $numfix, $numpor" $fich > /dev/null
then
echo "fin du script"
exit 0
else
echo "$nom, $prenom, $jour/$mois/$annee, $situation, $secu, $adresse, $numfix, $numpor" >> $fich
fi
else
echo "$nom, $prenom, $jour/$mois/$annee, $situation, $secu, $adresse, $numfix, $numpor" > $fich
fi
;;
2)
echo
echo "Quel salarié voulez-vous mettre à jour ?"
echo
;;
3)
;;
4)
cat fichier_salaries
;;
5)
echo
echo "Quelle salarié voulez-vous supprimer ?"
echo
;;
6)
exit 0
;;
esac
exit 0
Comme vous le voyez je ne suis pas très avancé mais je m'en sortirai ! j'ai besoin d'aide pour la 2), 3) et 5) surtout et aussi pour la syntaxe du numero de telephone fixe portable ainsi que celui de sécurité social qui n'est pas très facile à comprendre (pour moi)
Hors ligne
#2 Le 12/04/2012, à 22:07
- TLK x TyGeRz
Re : Script formulaire
Pour le numéro de téléphone fixe j'avais pensé a un truc comme sa
echo -n "Numéro de téléphone de fixe :"
read numfix
while echo $numfix | grep -qvE '^([0]||[1]{2}){4}[0-9]{2}$'
do
echo "Numero de téléphone incorrect"
echo -n "Veuillez le retapez: "
read numfix
done
Pour le num de sécu un truc du genre
[0][1][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]
et pour la 2, 3 et 5 j'ai toujours aucune idée. Si je ne suis pas assez clair dites le moi
Hors ligne
#3 Le 13/04/2012, à 09:47
- cracolinux
Re : Script formulaire
Salut!
article de wikipédia sur le numéro de sécu tu y trouveras sa décomposition (je veux pas dire que la sécu se décompose, nan, je veux dire...que...enfin, bref)
Tu veux bien me dire ce que c'est les <<< pour le sed (Rajout du 0 si nécessaire).
Hors ligne
#4 Le 13/04/2012, à 12:13
- Postmortem
Re : Script formulaire
Salut,
Tu veux bien me dire ce que c'est les <<< pour le sed (Rajout du 0 si nécessaire).
Voir le paragraphe REDIRECTIONS dans man bash (la commande ci-dessous t'y amène direct) :
man -P 'less -ip"^redirection"' bash
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#5 Le 13/04/2012, à 15:19
- cracolinux
Re : Script formulaire
Merci Postmortem !
Hors ligne
#6 Le 14/04/2012, à 13:53
- TLK x TyGeRz
Re : Script formulaire
Pour le numéro de sécurité sociale
if [[ "$secu" =~ "[0-1][0-9][0-9][0-9][1-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]" ]]
sauf que il me renvoi encore et toujours le message d'erreur comme si le numéro tapé n'est jamais correct
while ! ( [[ "$secu" =~ "[0-1][0-9][0-9][0-9][1-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]" ]] )
do
echo "Numéro incorect"
echo "Retapez le: "
read $secu
done
je cherche a n'accepter aucun caractères autre que les 13 chiffres
Hors ligne
#7 Le 14/04/2012, à 16:48
- pingouinux
Re : Script formulaire
Voilà, ceci devrait convenir :
read secu
while ! grep -E "^[12][0-9]{12}$" >/dev/null <<<"$secu"
do
echo "Numéro incorrect : $secu"
echo "Retapez le: "
read secu
done
Hors ligne
#8 Le 15/04/2012, à 00:46
- TLK x TyGeRz
Re : Script formulaire
Un numéro de sécurité social commence par 0 ou 1 et contient 13 chiffres et
read secu
while ! grep -E "^[12][0-9]{12}$" >/dev/null <<<"$secu"
do
echo "Numéro incorrect : $secu"
echo "Retapez le: "
read secu
done
ne fonctionne pas avec un 0 au début
Hors ligne
#9 Le 15/04/2012, à 05:57
- pingouinux
Re : Script formulaire
Bonjour,
Voici un extrait de Numéro de sécurité sociale en France
la première composante du numéro d’identification est définitivement limitée au sexe en mai 1945 : 1 pour masculin, 2 pour féminin
Si tu veux tout de même pouvoir mettre un 0 en premier chiffre :
while ! grep -E "^[012][0-9]{12}$" >/dev/null <<<"$secu"
Hors ligne
#10 Le 17/04/2012, à 10:35
- TLK x TyGeRz
Re : Script formulaire
ah oui nn j'me suis trompé c'est 1 ou 2 et non 0 ou 1 tu a raison merci il fonctionne très bien va juste falloir que je comprenne ton code x) pour le numéro de téléphone fixe j'ais fais
echo -n "Numéro de téléphone de fixe :"
read numfix
while echo $numfix | grep -qvE '^([0]||[1]{2}){4}[0-9]{2}$'
do
echo "Numero de téléphone incorrect"
echo -n "Veuillez le retapez: "
read numfix
done
mais ma syntaxe ne fonctionne pas une idée a me proposer
Hors ligne
#11 Le 17/04/2012, à 10:47
- pingouinux
Re : Script formulaire
Le principe est le même. Je suppose que le numéro doit se composer de 10 chiffres et commencer par 0 (à adapter si ce n'est pas le cas).
echo -n "Numéro de téléphone de fixe :"
read numfix
while ! grep -E "^0[0-9]{9}$" >/dev/null <<<"$numfix"
do
echo "Numero de téléphone incorrect => $numfix"
echo -n "Veuillez le retaper: "
read numfix
done
Hors ligne
#12 Le 17/04/2012, à 10:56
- TLK x TyGeRz
Re : Script formulaire
pour le numéro de téléphone portable j'ai repris ton exemple
while ! grep -E "^[0][6][0-9]{8}$" >/dev/null <<<"$numfix"
do
echo "Numero de téléphone incorrect"
echo -n "Veuillez le retapez: "
read numfix
done
je fais comment pour mettre 06 ou 07 au début pasque maintenant les numéro vont aussi a 07
Hors ligne
#13 Le 17/04/2012, à 11:00
- cracolinux
Re : Script formulaire
Voilà :
#!/bin/bash
echo -n "Numéro de téléphone de fixe :"
read numfix
#~ while echo $numfix | grep -qvE '^([0]||[1]{2}){4}[0-9]{2}$'
while ! echo $numfix | grep -E "^0{1}[0-9]{9}$"
do
echo "Numero de téléphone incorrect"
echo -n "Veuillez le retapez: "
read numfix
done
EDIT : ouch...largement grillé !
Dernière modification par cracolinux (Le 17/04/2012, à 11:01)
Hors ligne
#14 Le 17/04/2012, à 11:02
- TLK x TyGeRz
Re : Script formulaire
Et je ne sais pas trop quoi mettre pour le controle de l'adresse ? genre on doit vérifier si un numéro précède la phrase ou quelque chose du style
Hors ligne
#15 Le 17/04/2012, à 11:36
- pingouinux
Re : Script formulaire
je fais comment pour mettre 06 ou 07 au début pasque maintenant les numéro vont aussi a 07
while ! grep -E "^0[67][0-9]{8}$" >/dev/null <<<"$numfix"
Remarque : Pour le numéro de téléphone fixe, mon grep du #11 accepte tous les numéros commençant par 0. Il faut peut-être limiter le choix du deuxième chiffre.
Adresse : Certaines adresses n'ont pas de numéro (lieu-dit, par exemple). Le mieux est sans doute de prendre la ligne complète, en testant juste l'absence de caractères fantaisistes. Le code postal peut éventuellement être testé.
Hors ligne
#16 Le 17/04/2012, à 17:14
- TLK x TyGeRz
Re : Script formulaire
en testant juste l'absence de caractères fantaisistes.
Par caractères fantaisistes tu veux dire tous les $@#& ? etc il ya une syntaxe pour ce type de caractères ou il faut tous les écrire un par un pour éviter de les rencontrer ? et Pour l'adresse excépter
while [ -z "$adresse" ]
do
echo "Champs obligatoire"
echo -n "Veuillez tapez une adresse valide: "
read adresse
done
je ne vois pas comment controler un code postal au milieu ou a la fin d'une phrase !
Hors ligne
#17 Le 17/04/2012, à 17:59
- pingouinux
Re : Script formulaire
On peut dire qu'on accepte les chiffres, les lettres minuscules et majuscules, les espaces, les points et les virgules.
while ! grep -E "^[0-9a-zA-Z., ]*$" >/dev/null <<<"$adresse"
Pour tester le code postal, il faudrait effectivement qu'il soit demandé à part.
Hors ligne
#18 Le 19/04/2012, à 19:07
- TLK x TyGeRz
Re : Script formulaire
et pour la mise a jour de salarié les modifier ou les supprimé dans le fichier comment faire ? il faut enregistrer les données dans un fichier et dans des variables pour pouvoir les manipuler ? j'ai aucune idée de cmment je vais faire
Hors ligne
#19 Le 19/04/2012, à 20:58
- cracolinux
Re : Script formulaire
Hors ligne
#20 Le 21/04/2012, à 00:56
- TLK x TyGeRz
Re : Script formulaire
?
Hors ligne
#21 Le 27/04/2012, à 23:16
- TLK x TyGeRz
Re : Script formulaire
vaux mieux faire sa avec grep ou awk
Hors ligne
#22 Le 28/04/2012, à 12:05
- pingouinux
Re : Script formulaire
Bonjour,
et pour la mise a jour de salarié les modifier ou les supprimé dans le fichier comment faire ?
Pour éviter toute ambiguïté (en cas d'homonymes), je repérerais le salarié par son n° de ligne dans le fichier :
nl -ba fichier_salaries # Liste le fichier avec le numéro des lignes
Pour supprimer la ligne n° n :
sed -i "${n}d" fichier_salaries
Pour remplacer la ligne n° n par "nouvelle ligne" :
new="nouvelle ligne"
sed -i "${n}c$new" fichier_salaries
Hors ligne
#23 Le 29/04/2012, à 20:05
- TLK x TyGeRz
Re : Script formulaire
Voila mon script complet
#!/bin/bash
shopt -s extglob
echo
echo " GESTION DES SALARIES"
echo
echo "1. Saisie des informations personelles d'un salarié"
echo "2. Mise à jour des informations personnelles d'un salarié"
echo "3. Consultation des informations personnelles d'un salarié"
echo "4. Consultation des informations personnelles de tous les salariés"
echo "5. Supprimer un salarié"
echo "6. Quitter l'application"
echo
echo -n "Saisir un chiffre: "
read chiffre
while ! ( [ "$chiffre" -ge 1 ] && [ "$chiffre" -le 6 ] )
do
echo "Saisie invalide"
echo -n "Veuillez saisir un chiffre entre 1 et 6: "
read chiffre
done 2>/dev/null
case $chiffre in
1)
echo
echo -n "nom: "
read nom
while [[ "$nom" != +([a-zA-Z]) ]]
do
echo "Caractère incorrecte."
echo -n "Retapez votre nom: "
read nom
done
echo
echo -n "prenom: "
read prenom
while [[ "$prenom" != +([a-zA-Z]) ]]
do
echo "Caractère incorrecte."
echo -n "Retapez votre prenom: "
read nom
done
IFS=/
echo
echo -n "date de naissance (forme recommandée: jj/mm/aaaa): "
read jour mois annee
while [ -z "$jour" ] || [ -z "$mois" ] || [ -z "$annee" ]
do
echo "Champs incorrects ou manquants"
echo -n "Retapez votre date de naissance sous la forme (jj/mm/aaaa): "
read jour mois annee
done
while ! ( [ "$mois" -ge 1 ] && [ "$mois" -le 12 ] )
do
echo "Saisie incorrects"
echo -n "Retapez le mois de naissance: "
read mois
done 2>/dev/null
case $mois in
1|3|5|7|8|10|12)
while ! ( [ "$jour" -ge 1 ] && [ "$jour" -le 31 ] )
do
echo "Saisie invalide"
echo -n "Veuillez retapez le jour de naissance: "
read jour
done 2>/dev/null
;;
4|6|9|11)
while ! ( [ "$jour" -ge 1 ] && [ "$jour" -le 30 ] )
do
echo "Saisie invalide"
echo -n "Veuillez retapez le jour de naissance: "
read jour
done 2>/dev/null
;;
2)
if [ $(expr $annee % 4) = 0 ]
then
while ! ( [ "$jour" -ge 1 ] && [ "$jour" -le 29 ] )
do
echo "Saisie invalide"
echo -n "Veuillez retapez le jour de naissance: "
read jour
done 2>/dev/null
else
while ! ( [ "$jour" -ge 1 ] && [ "$jour" -le 28 ] )
do
echo "Saisie invalide"
echo -n "Veuillez retapez le jour de naissance: "
read jour
done 2>/dev/null
fi
;;
esac
jour=$(sed 's/^.$/0&/' <<< "$jour") # Rajout du 0 au jour si nécessaire
mois=$(sed 's/^.$/0&/' <<< "$mois") # Rajout du 0 au mois si nécessaire
echo
echo "Date de naissance : $jour/$mois/$annee valide"
echo
echo -n "Situation familiale (C pour célibataire, D pour divorcé(e), M pour marié(e), P pour pacsé(e)): "
read situation
while [ "$situation" != C ] && [ "$situation" != D ] && [ "$situation" != M ] && [ "$situation" != P ]
do
echo -n "Saisie incorrecte. Choisir parmis la liste proposée (C, D, M, P): "
read situation
done
echo
echo -n "Le numéro de sécurité sociale: "
read secu
while ! grep -E "^[12][0-9]{12}$" >/dev/null <<<"$secu"
do
echo "Saisie incorrecte"
echo -n "Retapez le numéro de sécurité sociale: "
read secu
done
echo
echo -n "Adresse: "
read adresse
while ! grep -E "^[0-9a-zA-Z., ]*$" >/dev/null <<<"$adresse"
do
echo "Caractère invalide"
echo -n "Veuillez tapez une adresse valide: "
read adresse
done
echo
echo -n "Numéro de téléphone de fixe: "
read numfix
while ! grep -E "^[0][19]{1}[0-9]{8}$" >/dev/null <<<"$numfix"
do
echo
echo "Numero de téléphone fixe incorrect"
echo -n "Veuillez le retapez: "
read numfix
done
echo
echo -n "Numéro de téléphone portable: "
read numpor
while ! grep -E "^[0]{1}[6-7]{1}[0-9]{8}$" >/dev/null <<<"$numpor"
do
echo
echo "Numero de téléphone mobile incorrect"
echo -n "Veuillez le retapez: "
read numpor
done
fich=fichier_salaries
if [ -f $fich ]
then
if grep "$nom, $prenom, $jour/$mois/$annee, $situation, $secu, $adresse, $numfix, $numpor" $fich > /dev/null
then
echo "fin du script"
exit 0
else
echo "$nom, $prenom, $jour/$mois/$annee, $situation, $secu, $adresse, $numfix, $numpor" >> $fich
fi
else
echo "$nom, $prenom, $jour/$mois/$annee, $situation, $secu, $adresse, $numfix, $numpor" > $fich
fi
;;
2)
nl -ba fichier_salaries
echo
echo "Saisissez le numéro correspondant au salarié que vous voulez mettre à jour: "
read num1
new="nouvelle ligne"
sed -i "${$num1 }c$new" fichier_salaries
;;
3)
;;
4)
echo
cat fichier_salaries
echo
;;
5)
nl -ba fichier_salaries
echo
echo -n "Saisissez le numéro correspondant au salarié que vous voulez supprimer: "
read num2
sed -i "${$num2}d" fichier_salaries
;;
6)
exit 0
;;
esac
exit 0
Lorsque je lance le script et le num 1 pr entré les informations d'un salarié a la fin après avoir entré le numéro de téléphone portable les données s'enregistrent dans le fichier fichier_salaries tout va bien sauf que apparement j'ai une érreur ligne 216 que j'ai essayer de corriger pendant 1h mais qui ne veux pas partir
Hors ligne
#24 Le 29/04/2012, à 20:07
- TLK x TyGeRz
Re : Script formulaire
j'ai aussi des problèmes ac cette syntaxe
sed -i "${n}d" fichier_salaries
apparement qui ne fonctionne pas très bien lorsque je l'utilise il ma renvoi bad situation ${n}d et j'ai remplacer le n par $num (code ci-dessus)
Hors ligne
#25 Le 29/04/2012, à 20:41
- pingouinux
Re : Script formulaire
$ nl -ba i
1 ttt
2 yyy
3 jjj
4 llll
5 hhh
Ma syntaxe en #22 : ${n}
$ n=2; sed -i "${n}d" i; nl -ba i
1 ttt
2 jjj
3 llll
4 hhh
Ta syntaxe en #23 : ${$n}
$ n=2; sed -i "${$n}d" i; nl -ba i
bash: ${$n}d: bad substitution
Dernière modification par pingouinux (Le 30/04/2012, à 08:37)
Hors ligne