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

Linux Discussion :

Script shell ne fonctionne pas


Sujet :

Linux

  1. #1
    Membre confirmé Avatar de alexp
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    459
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 459
    Points : 532
    Points
    532
    Par défaut Script shell ne fonctionne pas
    Bonjour, je me suis lancé depuis quelques semaines dans l'apprentissage du bourne shell (bash) sous linux et j'ai essayé de créer un script personnalisé qui lorsqu'on le lance, affiche un message particulier selon l'heure à laquelle il est lancé. Malheureursement, lorsque je l'éxécute, il ne se passe rien. Je précise que le chmod est correctement paramétré pour que le fichier soit éxécutable.
    voici le contenu de mon script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/bash
    b=`date|cut -c11-13`
    case $b in
    0|1|2|3|4) echo vous êtes à l\'heure;;
    5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23) echo vous êtes en retard;;
    esac

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 30
    Points : 36
    Points
    36
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/bash
    b=`date|cut -c11-13`
    case $b in
    0|1|2|3|4) echo vous êtes à l\'heure;;
    5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23) echo vous êtes en retard;;
    esac
    Le code ci-dessous s'exécute normalement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/bash
    b=`date|cut -c12-13`
    case $b in
    0|1|2|3|4) echo vous êtes à l\'heure;;
    5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23) echo vous êtes en retard;;
    esac
    Tu avais extrait trois caractères dont le premier est un espace pour les comparer ensuite avec une valeur numérique. Le résultat est donc : ni en retard ni à l'heure puisque aucun des tests n'est satisfait.

  3. #3
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par PeterT
    Le code ci-dessous s'exécute normalement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/bash
    b=`date|cut -c12-13`
    case $b in
    0|1|2|3|4) echo vous êtes à l\'heure;;
    5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23) echo vous êtes en retard;;
    esac
    Tu avais extrait trois caractères dont le premier est un espace pour les comparer ensuite avec une valeur numérique. Le résultat est donc : ni en retard ni à l'heure puisque aucun des tests n'est satisfait.
    Ce code non plus n'est pas (toujours) correct.
    Il fonctionne à 22h30, mais pas à 9h40.

    En effet, sur mon système, les caractères 12 et 13 du retour de "date" sont, actuellement, 09, ce qui ne correspond à aucune chaine testée.

    Il reste, alors, la possibilité de tester les valeurs préfixées par un 0 : 05|06|07|08|09|10|11 ...

    Une autre possibilité consiste à demander à "date" de n'afficher que l'heure, sans 0 préalable, et à supprimer le blanc par lequel commence la valeur si elle n'a qu'un chiffre :

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    case $(date +%H) in 0[0-4]) echo a l\'heure;; 0[5-9]|[12]?) echo en retard;; esac

  5. #5
    Membre confirmé Avatar de alexp
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    459
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 459
    Points : 532
    Points
    532
    Par défaut
    merci pour ces réponses. en faisant la modif de Peter ça fonctionne effectivement seulement quand l'heure est à 2 chiffres. Donc enrajoutant un zero dans le script devant chaque heure ça fonctionne bien pour toutes.
    Par contre 2Eurocents si tu pouvais me detailler comment intégrer la formule car j'ai essayé de l'intégré dans mon script de cette manière mais ça ne me donne que l'heure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/bash
    b= date "+%k" | tr -d " "
    case $b in 
    0|1|22|3|4) echo vous êtes à l\'heure;;
    5|6|07|8|9|10|11|12|13|14|15|16|17|18|19|20|21|23) echo vous êtes en retard;;
    esac
    Merci aussi Laurent pour ta formule,(elle fonctionne) et si tu pouvais m'expliquer vite fait qui sert à quoi.
    Merci d'avance

  6. #6
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Par exemple (mix entre ma proposition et une évolution de celle de Laurent) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/bash
    b=$(date "+%k" | tr -d " ")
    case $b in 
       [0-4]) echo vous êtes à l\'heure;;
       [5-9]|[12]?) echo vous êtes en retard;;
    esac

  7. #7
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    et remix

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/bash
    b=$(date +%k)
    case $b in 
       [0-4]) echo vous êtes à l\'heure;;
       [5-9]|[12]?) echo vous êtes en retard;;
    esac


    regarde dans man bash pour PATHNAME EXPANSION

  8. #8
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par laurentschneider
    et remix

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/bash
    b=$(date +%k)
    case $b in 
       [0-4]) echo vous êtes à l\'heure;;
       [5-9]|[12]?) echo vous êtes en retard;;
    esac


    regarde dans man bash pour PATHNAME EXPANSION
    C'est ce que j'avais cru, aussi, jusqu'à ce que je teste ... en mettant un $(date +%k -d "03:30"), je devrais être à l'heure, mais en fait, je ne matche aucun choix du case ... le script reste désespérément muet ... alors qu'en pipant pour supprimer le blanc j'ai une réponse satisfaisante.

    Le 'PATHNAME EXPANSION' peut-il être géné par ce blanc, qui fait par ailleurs partie de $IFS ?

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/12/2007, 14h27
  2. script shell ne reconnais pas let
    Par MortDansLAme dans le forum Shell et commandes GNU
    Réponses: 24
    Dernier message: 16/10/2007, 13h08
  3. [AJAX] script ajax qui fonctionne pas tout le temps
    Par krfa1 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 30/05/2007, 11h12
  4. [AJAX] Script ajax ne fonctionne pas sur IE :( !
    Par Funattitude dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 10/08/2006, 18h02
  5. [Mail] Pb de script qui ne fonctionne pas
    Par Yael dans le forum Langage
    Réponses: 5
    Dernier message: 14/02/2006, 09h27

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