Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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) big_smile

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).


Pixup : postez vos images vite et bien - Wificheck : Aidez nous à vous aider

« Ne devenez jamais pessimiste. Un pessimiste a plus souvent raison qu'un optimiste, mais l'optimiste s'amuse plus — et aucun des deux ne peut arrêter la marche du monde. » R.Heinlein

Hors ligne

#4 Le 13/04/2012, à 12:13

Postmortem

Re : Script formulaire

Salut,

cracolinux a écrit :

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 !
wink


Pixup : postez vos images vite et bien - Wificheck : Aidez nous à vous aider

« Ne devenez jamais pessimiste. Un pessimiste a plus souvent raison qu'un optimiste, mais l'optimiste s'amuse plus — et aucun des deux ne peut arrêter la marche du monde. » R.Heinlein

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 hmm

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 sad 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)


Pixup : postez vos images vite et bien - Wificheck : Aidez nous à vous aider

« Ne devenez jamais pessimiste. Un pessimiste a plus souvent raison qu'un optimiste, mais l'optimiste s'amuse plus — et aucun des deux ne peut arrêter la marche du monde. » R.Heinlein

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

TLK x TyGeRz #12 a écrit :

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

pingouinux #15  a écrit :

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


Pixup : postez vos images vite et bien - Wificheck : Aidez nous à vous aider

« Ne devenez jamais pessimiste. Un pessimiste a plus souvent raison qu'un optimiste, mais l'optimiste s'amuse plus — et aucun des deux ne peut arrêter la marche du monde. » R.Heinlein

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,

TLK x TyGeRz #18 a écrit :

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