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/01/2011, à 00:46

papi

Simuler un sgbd avec script! (Résolu)

Salut à tous!

J'ai un projet pour lequel je coince un peu, et j'ai besoin de votre aide.
En fait je dois ecrire un script shell sh qui émule les fonctionnalites basiques d'une base de données, qui sera contenue dans un fichier nomé sh.db par exemple. Le script doit être écrit en sh et s'exécuter sur une ubuntu 10.04 et plus. Vu le délai très court pour rendre mon projet(ce weekend) et que je ne suis pas très callé en programmation shell, je viens vers vous.

Voici les fonctionnalités demandées: Pouvoir insérer une clé dans le fichier via la commande(put) ./script.sh put <key> <valeur> (si la clé existe déjà la valeur est écrasée); supprimer une entrée de la base : ./script.sh del <key> <valeur>; afficher les valeurs qui matchent avec une expression(comme avec un grep): ./script.sh select <expr>; vider la base de donnees sans supprimer le fichier: ./script.sh flush; passer le fichier en parametre avec l'option -f; creer le fichier s'il est passe en parametre et n'existe pas. Donc le script prendra des options et des parametres; et les entrees sont juste Clé=Valeur.
Pour l'insertion et la suppresion, rien ne dois être affiché à l'écran.

J'ai donc defini mon format de base de donnees sous la forme : Clé | Valeur; une entrée par ligne du fichier.
J'ai ensuite écrit mon parser d'option et les fonctions à appeler en fonction des options si la syntaxe est bonne.
Là je bloque sur la fin de mon script.
En fait pour ce script je ne dois utiliser que du sh et pas d'exécutable.
Alors voici mon problème:

Je ne peux pas ajouter les entrées en fin de fichier en faisant par exemple un echo "$key | $value" >> fichier.db, car cela ne vérifie pas l'existance de l'entrée et il y a des doublons dans les entrées de la bd; j'aimerais savoir par quelle commande interne au shell(builtin) je peux faire des check sur les lignes du fichier comme dans un tableau avant l'insertion, ceci me permettrait donc de bien gérer la commande "put" de mon sgdb(mon script).
Pour la commande "del", il faut supprimer  l'entrée sans produire aucun affichage, et si le nom de la clé est juste passé en argument sans sa valeur, la clé doit restée présente mais sans contenu. J'aimerais aussi dans la mesure du possible que vous m'aidiez à ce niveau.
Pour le select il s'agit de recupérer l'expression passer en paramètres et lister toutes les valeurs de clés comportant des caractère de l'expression; de la même manière qu'un grep; seulement je n'ai pas droit au grep. Je ne sais pas si un "sed" ferais l'affaire....

J'aimerai aussi savoir quelle builtin appeler pour la création du fichier le cas échéant, et comment supprimer tout le contenu du fichier sans le supprimer lui même.

Enfin si vous avez pu répondre à mes préoccupation et que vous disposer encore d'un peu de temps, j'aimerais savoir procéder pour stocker la base de données dans le programme lui même et non plus dans un fichier externe; de quelle manière puis-je stocker les entrées et les manipuler dans ce cas? c'est une option que je devrais pouvoir gérer, mais la priorité est aux premières questions.

Merci infiniment pour votre aide précieuse.

Dernière modification par papi (Le 14/02/2011, à 09:32)

Hors ligne

#2 Le 27/01/2011, à 10:05

iuchiban

Re : Simuler un sgbd avec script! (Résolu)

Salut,

Ahlala, les étudiants qui s'y prennent au dernier moment hmm

Alors, pour commencer, je pense que tu as bien choisi ton format de DB.

Pour les fonctions :
PUT, il faut un truc de ce genre :

# Test présence clé
if [[ $(grep $CLE $DB) ]]
then
  echo "La clé est déjà présente, je mets à jour la valeur"
  sed -i 's/'"$key"'|.*/'"$key"'|'"$value"'/' fichier.db
else
  echo "la clé n'est pas présente"
  echo "$key | $value" >> fichier.db
fi

DEL :

if [[ $(grep "$key" fichier.db) ]]
then
  echo "clé présente"
  if [[ -z $value ]]
  then
    echo "valeur non définie. On garde la clé"
    sed -i 's/'"$key"'|.*/'"$key"'|/' fichier.db
  else
    # Il n'y a pas de test sur la correspondance valuer stockée <=> valeur passée en argument
    echo "valeur donnée. On supprime toute la ligne"
    sed -i '/'"$key"'/d' fichier.db
  fi
fi

SELECT :

sed '/'"$expr"'/!d' fichier.db

Bien sur, tu peux supprimer les lignes echo une fois que tu as fait tous les test.

bon courage quand même


C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.

Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.

Hors ligne

#3 Le 14/02/2011, à 09:31

papi

Re : Simuler un sgbd avec script! (Résolu)

Salut!

Merci pour ta reponse, mais surtout je m'excuse pour ce post dont j'ai mal assuré le suivi, à cause d'un incident que j'ai subi entre temps.

Toutefois mon projet avait été bien réalisé, et tout s'est bien passé.

Merci encore et bien de choses à notre communauté.

Hors ligne