Pages : 1
#1 Le 29/03/2007, à 00:35
- Shacamus
[Shell]
L'énoncé
L’objectif est implémenter un calendrier de base. Avec l’option -a, le script ajoute une date et l’in
formation associee (sur une seule ligne) au fichier ~/.agenda. Sans aucune option, les informations d’au
jourd’hui sont affichées. La date peut être soit un jour de la semaine ou une date dans l’annee (il s’agit
alors d’un evenement récurrent) ou bien d’une date complète pour les evenements uniques.
Voici un exemple de fichier agenda :
14fev|Saint Valentin
mar|piscine
25dec|Noel
Le paramêtre suivant l’option -a devra être la date au bon format (votre script pourra être plus ou
moins permissif en la matière). Pour ´tablir le motif de recherche dans le fichier, notez que date +%a
affiche le jour de la semaine sur trois lettres. Voir la documentation pour d’autres formats que %a.
Voila ce que j'ai codé
#!/bin/sh
if [ -s .agenda ]
then
sed -i 's/-a //g' .agenda #dégage le caractère de début de l'agenda
sed -i 's/ /|/g' .agenda #on dégage tous les .. mis pr delimiter les $
fi
if [ $1 = '-a' ]
then
echo "\\033[1;32mMode ajout d infos"
touch .agenda #cree le fichier .agenda ou change date de deerniere modif
echo "$*">> .agenda #Stocke les $ à la fin du fichier
echo "\\033[0;00m"
else #pas d'option -a
if [ -s .agenda ] #Si .agenda existe
then
echo "\\033[1;34mDétails du fichier"
echo "\\033[1;31m"
more .agenda
echo "\\033[0;00m"
else
echo "\\033[1;34mLe fichier n existe pas ou a une taille nulle"
echo "\\033[0;00m"
fi
fi
L'ennui dans l'histoire c'est que cela m'enregistre dans le fichier .agenda des infos du type la:)
30Mar|vacances|de|Pa
Je voulais savior d'une part, comment ne conserver que le premier "|"
Ou sinon, comment faire pour n'ajouter un "|" qu'entre $2 et $2...
Sinon encore autre chose:)
Je voudrais qu'à l'enregistrement, en supposant une 3eme option, cela insere la date actuelle, cependant je n'arrive pas...
Pourriez vous m'y aider?
date +%d%b
J'ai la codification, seulement je n'arrive pas à l'enregistrer dans le fichier .agenda...
Enfin, auriez vous une méthode SIMPLE et rapide pr ajouter des infos dans un fichier autre que
echo [texte...]>> [fichier]
parce que l'ennui de cette méthode, c'est que si'lon passe n parametres, ben.... ca risque d'etre long
Merci d avance
Dernière modification par Shacamus (Le 29/03/2007, à 00:35)
Hors ligne
#2 Le 29/03/2007, à 01:11
- naholyr
Re : [Shell]
Je voulais savior d'une part, comment ne conserver que le premier "|"
Ce n'est pas tant ça, il faut surtout que tu ne remplaces QUE LE PREMIER ESPACE par un pipe. C'est le comportement par défaut, il faut simplement ne pas lui demander de faire un remplacement global (option g).
date +%d%b
J'ai la codification, seulement je n'arrive pas à l'enregistrer dans le fichier .agenda...
Tu as vraiment tout ce qu'il faut, tu as déjà fait suffisamment pour prouver que tu peux largement t'en sortir en ayant ça
Enfin, auriez vous une méthode SIMPLE et rapide pr ajouter des infos dans un fichier autre que
echo [texte...]>> [fichier]
parce que l'ennui de cette méthode, c'est que si'lon passe n parametres, ben.... ca risque d'etre long
Pas de meilleure méthode, je ne vois pas bien où ça va être long par contre
Messagerie instantanée : naholyr@jabber.fr
Envoyer vos images sur le web d'un clic !
Choix du système à rebooter (graphique)
Hors ligne
#3 Le 29/03/2007, à 13:42
- Shacamus
Re : [Shell]
Je vous remercie,c'est réglé
simple utilisation des backquote et c"est réglé:)
Sinon que dire....
Voila, une nouvelle question
Je souhaite avoir la taille d'un répertoire en listant la taille des fichiers et en comptant le nombre de fichier
echo "taille du rép"
i=`ls -al | awk '{print $5}'` #Récupere taille et nom de fichier le tout stocke dans i
nb=`ls -al | wc -l`
echo $i
L'ennui c'est que i vaut alors une chaine de caractères..
J'ai alors pensé à deux méthodes:
1/ Une de type cut ou grep où on pique la chaine à gauche, on stocke dans une variable (seulement vu que le BASH est po typé ca va être la m***e) pareil pour la suite
2/ On fait un script plus developpé...
Que me conseilleriez vous?
Merci d avance
Dernière modification par Shacamus (Le 29/03/2007, à 13:47)
Hors ligne
#4 Le 29/03/2007, à 15:02
- naholyr
Re : [Shell]
Que me conseilleriez vous?
"du -h répertoire", et "man du" pour aller plus loin.
Messagerie instantanée : naholyr@jabber.fr
Envoyer vos images sur le web d'un clic !
Choix du système à rebooter (graphique)
Hors ligne
#5 Le 29/03/2007, à 18:06
- Shacamus
Re : [Shell]
Tu aurais po un ptit site indiquantles fonctions utiles en SHell ?
Vu qu'apparement tu geres bien
Hors ligne
#6 Le 29/03/2007, à 21:33
- Shacamus
Re : [Shell]
Voila un autre petit truc
En fait j'explique le but du jeu:
Exercice 3. Affichage d’informations sur un repertoire.
On souhaite ecrire un script donnant diverses indications sur le contenu d’un r´pertoire. Appele sans paramètre, ce script doit renvoyer la taille cumulée des fichiers que contient le répertoire courant. Avec l’option -r, il doit indiquer le nombre de sous-répertoires. Avec l’option -f, il doit renvoyer le nombre de fichiers. Appelé avec un nom de répertoire en paramètre (après les éventuelles options), les valeurs retournées concernent le répertoire indiqué. On pourra suivre les indications suivantes ´tape par ´tape :
1. Initialisation :
(a) Vérifier que le nombre de paramètres est compris entre 0 et 2. Afficher un message d’erreur et produire un code de retour adéquat sinon.
(b) Initialiser la variable repertoire à la valeur . (répertoire courant). Initialiser deux variables dofich et dorep ` 0. S’il y a au moins un paramètre et si le premier paramètre commence par un caractère - (on utilisera la commande cut), afficher le message :
Traitement option .
(c) Si le premier paramètre commence par un caractère -, identifier les options demandées en affectant la variable dofich (respectivement dorep) à 1 si l’option -f (respectivement -r) est active et en la laissant à 0 sinon. Tester sur des exemples en affichant dofich et dorep.
(d) Si la présence d’une option autre que -f ou -t est détectée, afficher un message d’erreur.
(e) En présence d’une option et s’il y a deux paramètres, affecter la valeur du second ` repertoire.
(f) S’il n’y a qu’un seul paramètre (et pas d’option), affecter cette valeur à la variable repertoire.
(g) S’il y a deux paramètres, et s’il n’y a pas d’option, afficher un message d’erreur.
2. Traitement :
– Si dorep vaut 1, alors :
– Initialiser nbr (variable qui designe le nombre de repertoires) à 0
– Parcourir la liste du contenu du repertoire
– Si un element var de la liste est un répertoire (on pourra effectuer ce test à l’aide de la commande test -d var ), incrementer nbr
– Après la boucle, afficher nbr et sortir avec un code de retour nul.
– Procéder de même avec les fichiers si dofich vaut 1. Tester si var est un fichier : test -f var .
– Si ni dorep ni dofich ne valent 1, la commande doit afficher la somme des tailles
des fichiers. On extraira avec cut cette information de la liste detaillee des informations concernant le contenu de repertoire dans une boucle while. La somme se calcule avec
total=‘expr $total + $cefichier‘ . Une fois calculee, afficher cette valeur.
#!/bin/sh
#################################################################
######## ####################
######## Affichage d'infos sur un rép ####################
######## ####################
#################################################################
#################################################################
############### #######################
############### @ author Shacamus #######################
############### #######################
#################################################################
if [ $# -gt 2 ] || [ $# -lt 1 ]
then
echo "Nombre de parametres entre 0 et 2"
echo "Veuillez corriger en conséquence votre saisie"
elif [ `echo $1 | cut -c1` = - ]
then
echo "Traitement option"
dofich=0
dorep=0
val=0
if [ !$2 ]
then
rep=$2 #cf specif on stocke $2 dans rep s'il est en 2eme para
fi
if [ $1 = '-f' ] #$1=-f <=>fichiers
then
dofich=1 #cf specif
echo "Nombre de fichiers"
#i=`ls -al | awk '{print $5}'`
elif [ $1 = '-d' ]
then
dorep=1 #cf specif
echo "Nombre de dossiers"
else
echo 'Veuillez saisir en option soit -d, soit -f'
fi
if [ $dorep -eq 1 ]
then
echo '$dorep vaut 1'
while ( 1 )
do
if [ `ls -al | test -d` ]
then
val=$val+1
echo $val
fi
done
fi #dorep =1o
fi
Voili voila
Seulement le test semble déconner
Dernière modification par Shacamus (Le 29/03/2007, à 21:35)
Hors ligne
Pages : 1