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 27/04/2010, à 23:09

ptiflo

exercice script naissance

Bonjours a tous, dans le cadre d'un exercice je dois créer un script shell qui permet quand on entre sa date de naissance, nous donne le jour !
De plus nous devons utiliser la commande cal.

Donc j'ai pensé mettre faire un grep dans la fonction cal du genre cal $mois $annee |grep $jour
mais le problème c'est que je veux récupérer la bonne ligne,
par exemple dans mon exemple je suis née le 5 octobre 1990 donc je récupère la ligne avec les jours en lettre (lu ma me .. et une autre ligne avec toute les lignes comprenant un 5)

comment puis-je isolé ce qui m'intéresse ?

Merci d'avance

Dernière modification par ptiflo (Le 27/04/2010, à 23:30)

Hors ligne

#2 Le 27/04/2010, à 23:25

helly

Re : exercice script naissance

m'intérèce

Outch lol

Bon comme c'est un exo je vais pas te donner la solution comme ça , mais je t'oriente vers la commande "cut" wink


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#3 Le 27/04/2010, à 23:31

ptiflo

Re : exercice script naissance

désolé pour la vilaine faute encore une salle habitude des sms ^^
merci bien pour l'idée mais si tu pense que je peux faire autrement dit le moi tout de même ...^^

merci bien

Hors ligne

#4 Le 27/04/2010, à 23:33

helly

Re : exercice script naissance

C'est faisable avec des grep et des cut smile


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#5 Le 27/04/2010, à 23:37

ptiflo

Re : exercice script naissance

ok ok merci bien

Hors ligne

#6 Le 27/04/2010, à 23:39

helly

Re : exercice script naissance

Si tu bloques encore je te donnerai la méthode, après tu aura plus qu'a coder ça wink


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#7 Le 27/04/2010, à 23:45

ptiflo

Re : exercice script naissance

Le problème c'est que je ne sais pas comment une fois le bon mois et l'année trouvé prendre la ligne avec le bon numéros ??

Hors ligne

#8 Le 27/04/2010, à 23:49

helly

Re : exercice script naissance

Avec ton grep $jour tu récupère toute une ligne , à toi de faire des tests/modifications pour savoir dans quelle colonne se trouve le jour !
Comparaison de chaînes de caractères !

Dernière modification par helly (Le 27/04/2010, à 23:50)


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#9 Le 27/04/2010, à 23:54

ptiflo

Re : exercice script naissance

avec mon grep $jour je récupère 3 lignes toutes celles qui comportent le numéros 5 dans mon exemple c'est la le problème

Hors ligne

#10 Le 27/04/2010, à 23:54

sputnick

Re : exercice script naissance

Avec grep c'est pas top.
A défaut de trouver la réponse par toi même, merci de comprendre ce qui se passe :

#!/bin/bash

# $0 <jour> <mois> <annee>

cal $2 $3 | awk -v jour=$1 '
NR==2 {
        split($0,head," ")
}
NR>2 {
        for (i=1; i<=7; i++) {
                if ($i == jour) {
                        print head[i]
                }
        }
}'

A utiliser comme ça :

./script.bash <jour> <mois> <année>

Que fait split et pourquoi ?
Que représente NR ?
Pourquoi utiliser une boucle for ?
De quel genre de variable est : head[i] ?
Pourquoi  i<=7; ?


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#11 Le 28/04/2010, à 00:04

helly

Re : exercice script naissance

Évidement si on donne une solution tongue


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#12 Le 28/04/2010, à 00:07

ptiflo

Re : exercice script naissance

merci bien pour le code mais je comprend pas tout pour le moment,
split découpe en morceau  mais NR je ne vois pas encore

Hors ligne

#13 Le 28/04/2010, à 00:12

sputnick

Re : exercice script naissance

http://www.grymoire.com/Unix/Awk.html

man awk

Tu perdra pas ton temps, ça fait partie de la trousse à outil de base de tout informaticien en environnement de type Unix


Edit: Je ne te demande pas de me répondre dans la minute, je me doute bien que tu ne comprends pas tout, sinon tu ne serais pas là, mais renseigne toi, tu sais exactement quoi chercher maintenant. On est pas loin si besoin...

Dernière modification par sputnick (Le 28/04/2010, à 00:14)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#14 Le 28/04/2010, à 00:13

ptiflo

Re : exercice script naissance

merci pour tout sa je continuerais demain je vous dit bonne nuit et peut être a demain

Hors ligne

#15 Le 28/04/2010, à 00:20

sputnick

Re : exercice script naissance

Pour finir, le choix de awk n'est pas une coquetterie ou que sais-je, cela permet d'utiliser la sortie de cal par colonnes et pas par nombre d'espaces comme le ferais cut. A la limite, on peux implémenter cela en bash pur en reprenant l'algo et en se servant de :

cal 4 2010 | tail -n +2 | while read a b c d e f g; do ...

On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#16 Le 28/04/2010, à 01:13

MrAzerty

Re : exercice script naissance

Tu as le droit à la commande date?

Si oui, il y a beaucoup, beaucoup plus simple:
<auto_censuré>Ah ben non, c'est vrai que c'est un exercice!</auto_censuré>

Mais penche toi sur la commande "date", son option --date, et ses formats de sortie...
C'est faisable en une seule commande très simple.

Dernière modification par MrAzerty (Le 28/04/2010, à 01:14)


On est toujours le geek de quelqu'un.

Hors ligne

#17 Le 28/04/2010, à 06:47

nesthib

Re : exercice script naissance

function mytime () {
	DATE="YYYY-MM-DD"  # à personnaliser
	if [ $1 ]; then ref="$1" && VERB='were' ; else ref=now && VERB='are' ; fi
	diff=$(( ( $(date -d $ref +%s) - $(date -d ${DATE} +%s) ) ))
	yr=$(( diff/31536000))
	dy=$(( $(( diff%31536000 )) / 86400 - (yr+1)/4 ))
	echo "you ${VERB} $yr years and $dy days old"
}

ce n'est pas la solution à ton exercice, juste une petite fonction de mon .bashrc dont je te laisse découvrir la fonction inutile donc indispensable.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#18 Le 28/04/2010, à 17:41

ptiflo

Re : exercice script naissance

Re bonjours tout le monde, en ce qui concerne les derniers posts, la commande Date est interdite dans l'exercice sinon trop facile  !!
merci a tous ceux qui mon aidé !! le script marche

Hors ligne

#19 Le 28/04/2010, à 18:21

ikthus

Re : exercice script naissance

bravo ptiflo,

C'est possible que tu mettes le code ici en le commentant un petit peu pour ceux qui y connaissent rien

Merci


Je ne serais jamais l'esclave de votre société - Assassin

Hors ligne

#20 Le 28/04/2010, à 18:53

ptiflo

Re : exercice script naissance

Me revoila enfaite je voulais améliorer mon script (désolé a sputnick mais ton code trop compliqué pour moi... hmm)
mais le problème c'est quand voulant mettre des tests en ce qui concerne le jour compris en 1 et 31 .... ba j'ai quelque message dont je en comprend pas la signification ??

./naissance.sh: line 26: [: « ] » manquant

Je vous laisse mon code au passage :

#!/bin/bash

#Script qui permet de connaitre son jour de naissance en lettre !!

clear

set -o xtrace


#création d'une fonction d'aide
function help ()
{
    echo "Erreur de synthaxe"
    echo "./naissance jour mois année"
    echo "EX : ./naissance.sh 05 10 1990"
    exit
}

# recuperation des arguments
j=$1
m=$2
a=$3

#vérification du nombre de paramètre
if [ $# -ne 3 ] ;
	then help ;
fi

#vérification des arguments 
if [ $j -lt "1" || $j -gt "31" ] ; 
	then echo "Le jour doit être compris entre 1 et 31" ;

elif [ $m -lt "1" || $m -gt "12" ] ;
	then echo "Le mois doit être compris entre 1 et 12 ";

elif [ $m -e "4" || $m -e "6" || $m -e "5" || $m -e "7" || $m -e "9" || $m -e "11" && $j -gt "30" ] ;
	then echo "Ce mois comprend seulement 30 jours";

elif [ $m -e "2" && $j -gt "29" ] ;
	then echo "Ce mois comprend 28 ou 29 jours";
fi 


# initialisation de la liste des jours
jours=(dimanche lundi mardi mercredi jeudi vendredi samedi)

# quel est le jour du premier dimanche du mois ?
premierDimancheDuMois=`cal -m $m $a | perl -ne '3..print(/(\d)$/)'`

# decalage et modulo pour obtenir l'indice de la liste
noJour=$(( ($j + 7 - $premierDimancheDuMois) % 7 ))


echo "le $j-$m-$a est tombe un ${jours[$noJour]}"

exit 0


set +o xtrace

Dernière modification par ptiflo (Le 28/04/2010, à 19:51)

Hors ligne

#21 Le 28/04/2010, à 20:00

toto2006

Re : exercice script naissance

Je vous laisse mon code au passage :

tu rigoles la j'espère lol

parceque moi ca me rappelle fortement le code de hardball
avec un effort il est vrai sur le test des arguments smile

hardball

Re: [ScriptShell / Bash] Récupérer des colonnes de la sortie d'un 'cal'

challenge sympa !

voici mon code

Code:

#!/bin/bash

#  usage : ./cal.sh <jour> <mois> <annee>

# recuperation des arguments
j=$1
m=$2
a=$3

# initialisation de la liste des jours
jours=(dimanche lundi mardi mercredi jeudi vendredi samedi)

# quel est le jour du premier dimanche du mois ?
premierDimancheDuMois=`cal -m $m $a | grep " 1 " | awk '{print $NF}'`

# decalage et modulo pour obtenir l'indice de la liste
noJour=$(( ($j + 7 - $premierDimancheDuMois) % 7 ))


echo "le $j-$m-$a est tombe un ${jours[$noJour]}"

exit 0

http://forum.ubuntu-fr.org/viewtopic.php?id=386679

Hors ligne

#22 Le 28/04/2010, à 21:06

ptiflo

Re : exercice script naissance

eh ba oui le forum est fait pour sa non ? on prend des infos partout et on les met a notre "sauce"

Dernière modification par ptiflo (Le 28/04/2010, à 21:06)

Hors ligne

#23 Le 28/04/2010, à 22:21

Totor

Re : exercice script naissance

Bonsoir,

cal -m 10 1990 | awk -v j=$(date +%u -d '10/05/1990') '/^[[:blank:][:alpha:]]+$/ { print  $j}'

bon ok... je triche...
et c'est vraiment parce qu'il faut utiliser cal... sinon :
date +%A -d '10/05/1990'

Pour revenir au sujet avec ses contraintes (et toujours adepte des solutions tordues) :

jour=$1
mois=$2
annee=$3
cal $mois $annee|egrep "^${jour}[ ]+|[ ]${jour}[ ]+|[ ]${jour}$|^[[:alpha:][:blank:]]+$"|sed 's/   / XX/g'|tr -s ' ' '\n'|grep -B 7 "^${jour}$"|head -1

-- Lucid Lynx --

Hors ligne

#24 Le 28/04/2010, à 22:24

toto2006

Re : exercice script naissance

désolé j'ai rien contre toi mais :

1) non "le forum" n'est pas un endroit ou l'on dépose ses devoirs.
   c'est un endroit on l'on expose des problèmes , échange des idées , partage des connaissances & expériences ...
   
   en plus dans "Trucs, astuces et scripts utile" smile

2) Oui on prend des infos partout , mais on les assimile surtout !
   après si tu veux on les met a notre "sauce"
   mais en général on cite les sources (ou au moins on évite le mot a mot ) quand on publie quelque part le code "a sa sauce" .

3) Ouvrir un nouveau post ici était donc inutile puisque avec un peu de recherches tu as réussi a trouver un post qui
  répondait a ta question . Au pire tu pouvais poster dans celui ci .
 
Maintenant pour ton problème tu devrais peut être commencer par te documenter

http://abs.traduc.org/abs-fr/ch07.html
http://abs.traduc.org/abs-fr/ch07s03.html

comparaison composée

-a

    et logique

    exp1 -a exp2 renvoie vrai si à la fois exp1 et exp2 sont vrais.
-o

    ou logique

    exp1 -o exp2 renvoie vrai si soit exp1 soit exp2 sont vrais.

Elles sont similaires aux opérateurs de comparaison Bash && et ||, utilisés à l'intérieur de double crochets.

[[ condition1 && condition2 ]]

Les opérateurs -o et -a fonctionnent avec la commande test ou à l'intérieur de simples crochets de test.

if [ "$exp1" -a "$exp2" ]

Hors ligne

#25 Le 28/04/2010, à 22:42

nesthib

Re : exercice script naissance

toto2006 a écrit :

désolé j'ai rien contre toi mais :
1) non "le forum" n'est pas un endroit ou l'on dépose ses devoirs.
   c'est un endroit on l'on expose des problèmes , échange des idées , partage des connaissances & expériences ...
   
   en plus dans "Trucs, astuces et scripts utile" smile

oups j'avais pas vu ça… je déplace donc. Trucs astuces et scripts utiles est fait pour donner des trucs et astuces, pas pour demander de l'aide.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne