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 :

Script shell date donnée


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 164
    Par défaut Script shell date donnée
    Bonjour, j'ai tenté de faire un script shell d'une quelconque date , lorsque que je tape cette date normalement s'aafiche le jour.

    Je l'ai fait d'une première façon avec le stockage de celle-ci dans 3 variables.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash
     
    jour=16
    mois=03
    annee=1993
     
    ncal -hH $annee-$mois-$jour -d $annee-$mois | grep $jour | cut -f1 -d' '
    Puis d'une deuxième façon en demandant les valeurs affectées par $1,$2,$3 mais il y a un problème avec la commande grep dont je ne voit pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash
     
    echo "quel est votre date d'anniversaire? "
     
    read $1
    read $2
    read $3
     
    ncal -hH $3-$2-$1 -d $3-$2 | grep "$1" | cut -f1 -d' '
    P.S: Evitez de me dire , cherches un peu parce que j'ai déjà essayé pleins de commande sans succès.

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Bonjour,

    bah, cherche encore parce que t'as pas dû chercher ni beaucoup, ni longtemps !

    ton script ne te répondrait-il pas quelque chose comme : bash: read: « 16 » : identifiant non valable ?
    ce qui signifie que tu tentes de donner un nom de variable qui commence par un chiffre, ce qui n'est pas accepté pas le shell.
    les paramètres positionnels sont passés au script, il n'ont pas besoin d'être lus avec read :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ set 12 03 1993 # je positionne manuellement des paramètres pour l'exemple
    $ ncal -hH $3-$2-$1 -d $3-$2 | grep $1 | cut -f1 -d' ' # bon, ben, ça marche !
    ve
    par contre, c'est faux : si tu essayes avec un chiffre, au lieu d'un nombre, la commande te retournera plusieurs jours.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ date -d $2/$1/$3 +%a
    ven.
    !!!
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    par contre, c'est faux : si tu essayes avec un chiffre, au lieu d'un nombre, la commande te retournera plusieurs jours.
    [Chipotage]
    Juste pour information et par souci de correction (voire chipotage):
    dans beaucoup de pays, nous écrivons les nombres en base dix, donc avec dix signes distincts que nous appelons des chiffres et qui sont 0 1 2 3 4 5 6 7 8 9.
    Avec ces chiffres, nous pouvons écrire toutes sortes de nombres, dont notamment les nombres entiers, comme 42, 3141592, 999999999, etc.
    Et, parmi les nombres entiers, nous pouvons aussi écrire les nombres entiers positifs ou nuls inférieurs à dix, qui sont 0 1 2 3 4 5 6 7 8 9.
    En fait, ce sont juste des nombres à un chiffre.

    Tout ça juste pour dire et justifier qu'à ta place, j'aurais plutôt dit:

    si tu essayes avec un nombre à 1 chiffre, au lieu d'un nombre à 2 chiffres, ...
    [/Chipotage]

  4. #4
    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

    J'ai lu en diagonale, mais si le but est d'avoir le jour, la commande date est suffisante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ date
    jeu. 10 déc. 2015 11:38:57
    $ date +"%A"
    jeudi
    $ date -d"2015/12/23" +"%A"
    mercredi
    $ date -d"2014/06/01" +"%A"
    dimanche

  5. #5
    Membre très actif
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 164
    Par défaut
    merci pour vos réponses mais ce n'est pas la réponse à ma question pour l'exercice il faut n'utiliser que cal , pour info j'ai déjà cherché sans succès....

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par taidasuke Voir le message
    merci pour vos réponses mais ce n'est pas la réponse à ma question pour l'exercice il faut n'utiliser que cal , pour info j'ai déjà cherché sans succès....
    Comme tu ne donnes pas beaucoup d'information et que tu ne poses pas de question, il n'est pas facile de t'aider...

    Citation Envoyé par taidasuke Voir le message
    Bonjour, j'ai tenté de faire un script shell d'une quelconque date , lorsque que je tape cette date normalement s'aafiche le jour.

    Je l'ai fait d'une première façon avec le stockage de celle-ci dans 3 variables.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash
     
    jour=16
    mois=03
    annee=1993
     
    ncal -hH $annee-$mois-$jour -d $annee-$mois | grep $jour | cut -f1 -d' '
    Comme je ne suis pas sous linux, mon "ncal" est un peu différent (mais tu devrais pouvoir l'adapter):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ncal: illegal option -- h
    usage: cal [-jy] [[month] year]
           cal [-j] [-m month] [year]
           ncal [-Jjpwy] [-s country_code] [[month] year]
           ncal [-Jeo] [year]
    Du coup, j'utilise la syntaxe ncal month year, ce qui retourne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ ncal "$mois" "$annee"
        Mars 1993
    Lu  1  8 15 22 29
    Ma  2  9 16 23 30
    Me  3 10 17 24 31
    Je  4 11 18 25
    Ve  5 12 19 26
    Sa  6 13 20 27
    Di  7 14 21 28
    Pour récupérer le jour, il faut effectivement utiliser grep, mais si on fait un bête grep $jour et que la variable jour contient un nombre à 1 chiffre (suivez mon regard), on risque d'avoir trop de lignes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ ncal "$mois" "$annee" | fgrep 1
        Mars 1993
    Lu  1  8 15 22 29
    Ma  2  9 16 23 30
    Me  3 10 17 24 31
    Je  4 11 18 25
    Ve  5 12 19 26
    Sa  6 13 20 27
    Di  7 14 21 28
    Heureusement, il y a une option de grep qui permet de spécifier qu'on cherche un mot entier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ ncal "$mois" "$annee" | fgrep -w 1
    Lu  1  8 15 22 29
    Bon. Si on cherche vraiment les ennuis et qu'on met une année à 2 chiffres (genre ncal 12 12 | fgrep -w 12), on pourrait avoir des problèmes (qu'on résoudrait avec un "tail")...

    Après, un coup de "cut" et c'est bon.

    Puis d'une deuxième façon en demandant les valeurs affectées par $1,$2,$3
    Si ton prof a effectivement parlé de "$1,$2,$3", c'est qu'il pensait probablement aux arguments du shell et non pas à une question interactive.

    Du coup, la solution serait de mettre le contenu des arguments dans tes variables et de faire la même ligne de commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash
     
    jour=$1
    mois=$2
    annee=$3
     
    ncal "$mois" "$annee" | tail +2 | fgrep -w "$jour" | cut -f1 -d' '

  7. #7
    Membre très actif
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 164
    Par défaut
    Voici le sujet de l'exo :
    Q. 4: Votre jour d'anniversaire
    Grâce à la commande cal, écrivez un script-shell qui affiche le jour de la semaine pour une date donnée. Appliquez ce script à votre date d'anniversaire. Vous pouvez utiliser des variables pour le stockage de la date initiale. moi j'ai fait ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash
     
    jour=16
    mois=03
    annee=1993
     
    ncal -hH $annee-$mois-$jour -d $annee-$mois | grep $jour | cut -f1 -d' '
    ça marche mais je voudrais que lorsque le script se lance que celui demande la valeur de la date puis qu'il affiche le jour de la date en question.

  8. #8
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    Citation Envoyé par taidasuke
    Evitez de me dire , cherches un peu (...)
    merci pour vos réponses mais ce n'est pas la réponse à ma question (...)
    Voici le sujet de l'exo (...)
    je voudrais que lorsque le script se lance que celui demande la valeur de la date puis qu'il affiche le jour de la date en question.
    je me permets de citer un extrait choisi des règles du forum :
    IV-N. Lycéen, collégien, étudiant, (bref un apprenti développeur)
    (...)
    Nous ne sommes pas là pour faire vos exercices.
    heureusement que t'es pas, en plus, exigeant

    les différents intervenants t'ont déjà donné pas mal de bons conseils, probablement fait gagner du temps et peut-être même des points sur la note finale

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par taidasuke Voir le message
    Q. 4: Votre jour d'anniversaire
    Grâce à la commande cal, écrivez un script-shell qui affiche le jour de la semaine pour une date donnée. Appliquez ce script à votre date d'anniversaire. Vous pouvez utiliser des variables pour le stockage de la date initiale. moi j'ai fait ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash
     
    jour=16
    mois=03
    annee=1993
     
    ncal -hH $annee-$mois-$jour -d $annee-$mois | grep $jour | cut -f1 -d' '
    ça marche

    On peut probablement en déduire que tu es donc né un mardi 16 mars!

    Peux-tu me dire quel était le jour de semaine juste 2 semaines avant ta naissance?

    Plus précisément, comme 16 - 14 = 2, quel est le résultat en remplaçant 16 par 2 dans ton programme?

    Je suis curieux de voir ta réponse!


    Sinon, si le sujet de l'exo est de donner le jour de semaine de ma naissance, y a plus simple et je le prouve:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash
     
    jour=16
    mois=03
    annee=1993
     
    echo "Mardi"



    mais je voudrais que lorsque le script se lance que celui demande la valeur de la date puis qu'il affiche le jour de la date en question.
    Alors là, je dirais sans hésiter: reprends ton script avec "read" et renseigne-toi sur la syntaxe de "read"

  10. #10
    Membre très actif
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 164
    Par défaut
    Aider ne veut pas dire rabaisser les autres n'est-ce pas , je ne trouve pas cela drole... je vais essayer de chercher même dans ce forum les gens se moquent de ceux qui débutent....

  11. #11
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    tu poses des questions dont les réponses sont très faciles à trouver.

    on te donne des pistes les réponses.
    alors, j'estime qu'on a le droit de dédramatiser, et se détendre un petit peu.

    quand tu cherches le sel, qui est pourtant sur la table, tes proches ne te taquinent-ils pas ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Gérer une base de données avec un script shell!
    Par nixmind dans le forum Administration système
    Réponses: 27
    Dernier message: 31/01/2011, 15h55
  2. Calcul de date en script shell
    Par mamax29 dans le forum Linux
    Réponses: 11
    Dernier message: 11/10/2010, 10h41
  3. besoin d'aide pour un script shell extrayant les données d'un fichier texte ou un fichier log
    Par haithem20080 dans le forum Applications et environnements graphiques
    Réponses: 7
    Dernier message: 15/03/2010, 14h10
  4. [Shell Script] Récupérer date de modif et touch
    Par lavazavio dans le forum BSD
    Réponses: 2
    Dernier message: 26/11/2008, 17h10
  5. [GML] Scripts shell pour extraire des données d'Oracle
    Par diamonds dans le forum XQUERY/SGBD
    Réponses: 1
    Dernier message: 28/09/2006, 07h04

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