Contenu | Rechercher | Menus

Annonce

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

Pour en savoir un peu plus sur l'équipe du forum.

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.

#1 Le 29/03/2007, à 00:35

Shacamus

[Shell]

L'énoncé smile

    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 smile


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]

Shacamus a écrit :

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 wink

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 smile

Pas de meilleure méthode, je ne vois pas bien où ça va être long par contre

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 tongue

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 tongue

Dernière modification par Shacamus (Le 29/03/2007, à 13:47)

Hors ligne

#4 Le 29/03/2007, à 15:02

naholyr

Re : [Shell]

Shacamus a écrit :

Que me conseilleriez vous?

"du -h répertoire", et "man du" pour aller plus loin.

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 big_smile

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 smile
Seulement le test semble déconner neutral

Dernière modification par Shacamus (Le 29/03/2007, à 21:35)

Hors ligne