IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Contrôle Paramètre script


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 45
    Par défaut Contrôle Paramètre script
    Bonjour,

    Je dois modifier des scripts que j'ai faits il y a quelques temps et prendre en charge maintenant des paramètres. Pour le moment il n’y a que 2 paramètres.
    Le 1er paramètre est une date au format dd/mm/aaaa et le 2nd paramètre un : oui,o, non ou n.

    J'ai donc écrit les quelques lignes ci-dessous, mais je pense que l'on peut faire beaucoup plus simple. Si c'est le cas, pourriez-vous m'indiquer des pistes ....
    D'avance merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    case $# in
        "1")
     
                    if [ `echo $1 | awk -F"/" '{  if ( $1 > 0 && $1 <= 31  &&  $2 > 0 && $2 <= 12 && $3 > 0 && length($3) == 4 ) { print "OK" } else{ print "NOK" } }'` == "OK" ];
                    then
                            DATE_JOUR=$1;
                            DATE_JOUR2=`echo $1 | awk -F"/" '{print($3$2$1)}'`
                    else
                            echo "la date n est pas dans un format valide (dd/mm/yyyy)"
                            echo "la date du jour sera prise par déut"
                            DATE_JOUR=$(date '+%d/%m/%Y');
                            DATE_JOUR2=$(date '+%Y%m%d');
                    fi
     
                    #Pas de parametre pour l envoi des fichiers
                    #On utilise par déut la valeur NON
                    MAIL_AVEC_FICHIER=NON;
                    ;;
     
     
     
        "2")
                    if [ `echo $1 | awk -F"/" '{  if ( $1 > 0 && $1 <= 31  &&  $2 > 0 && $2 <= 12 && $3 > 0 && length($3) == 4 ) { print "OK" } else{ print "NOK" } }'` == "OK" ];
                    then
                            DATE_JOUR=$1;
                            DATE_JOUR2=`echo $1 | awk -F"/" '{print($3$2$1)}'`
                    else
                            echo "la date n est pas dans un format valide (dd/mm/yyyy)"
                            echo "la date du jour sera prise par déut"
                            DATE_JOUR=$(date '+%d/%m/%Y');
                            DATE_JOUR2=$(date '+%Y%m%d');
                    fi
     
                    var=`echo $2 | awk '{print tolower($0)}'`;
                             case "$var" in
                                    o) MAIL_AVEC_FICHIER=OUI;
                                            ;;
                                    oui) MAIL_AVEC_FICHIER=OUI;
                                       ;;
                                    n) MAIL_AVEC_FICHIER=NON;
                                            ;;
                                    non) MAIL_AVEC_FICHIER=NON;
                                             ;;
                                    *) MAIL_AVEC_FICHIER=NON;
                                       ;;
                            esac
                    ;;
     
        *)
                    DATE_JOUR=$(date '+%d/%m/%Y');
                    DATE_JOUR2=$(date '+%Y%m%d');
                    MAIL_AVEC_FICHIER=NON;
     
            ;;
     
    esac

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Bonjour,

    D'abord, le début du code peut être mis en facteur commun en le plaçant dans une fonction. Pour bash, les fonctions ne sont pas un espace confiné où les variables sont à redéfinir. C'est la continuation naturelle de ton script et les variables seront accessibles sans les faire rentrer et sortir de la fonction.

    Ensuite, pour le test de format du premier argument:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ if grep -q '^[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]$' <<<'23/12/'; then echo OK; else echo KO; fi
    KO
    $ if grep -q '^[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]$' <<<'23/12/2014'; then echo OK; else echo KO; fi
    OK
    donc ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ if grep -q '^[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]$' $1 ; then ...; else ... fi
    Pour le oui/non, seul la détection du oui est nécessaire, sinon, c'est NON.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ sed 's/[^a-zA-Z]//g;s@^[oO]$\|^[oO][uU][iI]$@OUI@;/^OUI$/!s@.*@NON@' <<< 'oui'
    OUI
    $ sed 's/[^a-zA-Z]//g;s@^[oO]$\|^[oO][uU][iI]$@OUI@;/^OUI$/!s@.*@NON@' <<< 'o'
    OUI
    $ sed 's/[^a-zA-Z]//g;s@^[oO]$\|^[oO][uU][iI]$@OUI@;/^OUI$/!s@.*@NON@' <<< 'O'
    OUI
    $ sed 's/[^a-zA-Z]//g;s@^[oO]$\|^[oO][uU][iI]$@OUI@;/^OUI$/!s@.*@NON@' <<< '0'
    NON
    $ sed 's/[^a-zA-Z]//g;s@^[oO]$\|^[oO][uU][iI]$@OUI@;/^OUI$/!s@.*@NON@' <<< 'truc'
    NON
    Donc ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MAIL_AVEC_FICHIER=$(sed 's/[^a-zA-Z]//g;s@^[oO]$\|^[oO][uU][iI]$@OUI@;/^OUI$/!s@.*@NON@' <<<$2)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 45
    Par défaut
    Bonjour Flodelarab,

    Merci pour votre solution, je l'ai testé et c'est parfait pour moi. Désolé pour ma réponse tardive....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/05/2006, 18h40
  2. Paramètres script SQL
    Par greamm dans le forum Oracle
    Réponses: 2
    Dernier message: 27/04/2006, 15h53
  3. [VB6] Passage d'un contrôle en paramètre
    Par pier* dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 13/04/2006, 15h48
  4. Passer un paramètre dans le script
    Par ipeteivince dans le forum Windows
    Réponses: 2
    Dernier message: 02/03/2006, 17h00
  5. [8i]contrôle de scripts de création
    Par vintz72 dans le forum Oracle
    Réponses: 3
    Dernier message: 30/12/2005, 07h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo