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

Administration système Discussion :

Bash : Test d'une chaine


Sujet :

Administration système

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2006
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 254
    Points : 138
    Points
    138
    Par défaut Bash : Test d'une chaine
    Bonjour,
    Dans un script bash, je passe à une fonction le numéro du mois sous la forme d'une chaîne "01", "02", ... "12" et je cherche à me faire retourner le nombre de jours de ce mois
    J'ai écrit ceci :
    case $1 in # $1 mois sous forme "01", "02" ... "12"
    1 ) return 31 ;;
    2 ) return 28 ;;
    ...........
    10 ) return 31 ;;
    11 ) return 30 ;;
    12 ) return 31 ;;
    esac;
    Mais ca ne marche que pour les mois à deux chiffres (10, 11, 12).
    Comment faire pour que ca marche sur tous les mois ?
    (Je suppose qu'il faut soit convertir la chaine en nombre, soit faire un test sur la chaine, mais je n'ai pas trouvé la syntaxe, et je ne sais même pas si c'est possible)
    D'avance merci pour vos lumières.
    Kim

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    "convertie" les chaines en numeriqUE, ce qui permettra de ne plus te preocuper du 0 devant et utilise un tableau ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #!bin/sh
    #alternative
    #(( mois=$1 ))
    #ou
    typeset -i mois=$1
    #fin alternative
     
    declare -a jour=(0 31 28 31 30 31 30 31 31 30 31 30 31)
    #valeur de retour et de toutes les variables
    echo $mois
    echo  ${jour[@]}
    #nombre de jour dans le mois en parametre
    echo ${jour[$mois]}

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Attention aux années bissextiles!

    Alternative avec la fonction date de coreutils:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #! /bin/bash
     
    # Mois dont on doit trouver le nombre de jours
    MOIS=2
    ANNEE=2007
     
    # calcul du nombre de jours de ce mois
    # on passe d'abord au premier jour du mois suivant --> $((MOIS+1))
    # et on en retire un jour --> 1 days ago
    # affichage du n° du jour --> format +%d
     
    date --date $ANNEE'-'$((MOIS+1))'-1 1 days ago' +%d

Discussions similaires

  1. [Tableaux] Test sur une chaine de caractères et affichage
    Par ferjani.kais dans le forum Langage
    Réponses: 2
    Dernier message: 04/01/2008, 17h59
  2. Test sur une chaine de caractéres
    Par Je-cherche-pfe dans le forum C#
    Réponses: 3
    Dernier message: 04/09/2007, 23h44
  3. Test d'une chaine de caractères
    Par stepd dans le forum C
    Réponses: 6
    Dernier message: 27/07/2006, 15h36
  4. [VBA-E] test sur une chaine de charactère
    Par gruget dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/04/2006, 14h24
  5. test d'une chaine de caractère
    Par tsyl dans le forum Oracle
    Réponses: 1
    Dernier message: 14/03/2006, 09h20

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