Serveur FTP en bash

patrice86 Messages postés 1380 Date d'inscription   Statut Membre Dernière intervention   -  
patrice86 Messages postés 1380 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'essaie (en vain) d'effectuer un serveur FTP le tout en bash.

Pour cela, j'ai créer 3 fichiers bash et un backpipe (avec mkfifo)
L'idée étant que :
- lorsque j'exécute mon fichier serveur.sh, il lance à l'aide de la commande nc (netcat) le serveur en utilisant le backpipe (ok ça fonctionne)

- mon client se connecte dessus (fonctionne) et peut éxécuter des lignes de commandes directement sur le serveur (cd, ls...) ça fonctionne.

Ce que j'aimerai faire maintenant c'est que lorsque je lance mon fichier client.sh, il peut soit exécuter des commandes en local soit elles sont exécuter sur le serveur (voir code du fichier client.sh, cela fonctionne).
Mais je n'arrive pas à envoyer des fichiers du client vers le serveur et que le client puisse récupérer des fichiers qui sont sur le serveur directement chez lui !
Il faut utiliser la commande get ? Je n'y comprend rien du tout ! Je vous demande donc un peu d'aide svp =)

Voici les différents fichiers:
serveur.sh
#!/bin/bash
#Script permettant de lancer un serveur en fonction des paramètres indiqués lors de l'appel du script
#ligne de commande pour éxécuter le script : sh serveur.sh adresse port
nc  -l $1 -k $2 < ./tmp/backpipe | ./tmp/monscript.sh 1> ./tmp/backpipe


monscript.sh
<#!/bin/bash

echo "Pour lister les fichiers, taper : lister"
echo "Pour naviguer dans le dossier, taper : nav"
echo "Pour quitter, taper : exit"
echo "Pour accèder au dossier parent, taper: retour"
read cmd
while [ $cmd!="exit" ];
do
case $cmd in
 "lister")ls;echo "Pour lister les fichiers, taper : lister"
  echo "Pour naviguer dans le dossier, taper : nav"
  echo "Pour quitter, taper : exit"
  echo "Pour accèder au dossier parent, taper: cd ..";;
 "nav") 
  echo "A quel dossier voulez-vous accéder ?"
  while read entree;
  do
   cd $entree;
   break;
  done
  echo "Pour lister les fichiers, taper : lister"
  echo "Pour naviguer dans le dossier, taper : nav"
  echo "Pour quitter, taper : exit"
  echo "Pour accèder au dossier parent, taper: cd ..";;
        "retour")cd ..;echo "Pour lister les fichiers, taper : lister"
  echo "Pour naviguer dans le dossier, taper : nav"
  echo "Pour quitter, taper : exit"
  echo "Pour accèder au dossier parent, taper: cd ..";;
esac
read cmd
done


client.sh

#!/bin/bash
#Script permettant au client de communiquer avec le serveur
#ligne de commande pour éxécuter le script : sh serveur.sh adresse port

while [ $cmd!="exit" ];
read cmd
while [ $cmd!="exit" ];
   do
      case $cmd in
         "lister")ls;;
 "listerserveur")ls | nc $1 $2;
esac
read cmd
done



Merci BEAUCOUP de votre aide =)
A voir également:

2 réponses

zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
Salut,

Avant d'aller plus loin, il y a une erreur dans ta syntaxe
[ $cmd!="exit" ]
, il faut des espaces de part et d'autre de
!=
, tout comme avec des simples crochets il est préférable de mettre des quotes doubles autour des variables et d'écrire ces mêmes variables avec des accolades ;-\

[ "${cmd}" != "exit" ]
0
patrice86 Messages postés 1380 Date d'inscription   Statut Membre Dernière intervention   125
 
Pour cela j'ai corrigé =) Merci
je change les codes.

Maintenant il me reste à envoyer des fichiers du client vers le serveur et inversement.


monscript.sh
#!/bin/bash
echo "Saisir une commande (exit pour sortir)"
while read cmd;
do
operateur=$(echo $cmd | cut -d" " -f1);
operande=$(echo $cmd | cut -d" " -f2);
while [ $operateur != "exit" ] ;
do
case $operateur in
"ls") if [ "$operande" = "-a" ]
then
ls -a
elif [ "$operande" = "-l" ]
then ls -l
elif [ "$operande" = "-R" ]
then ls -R
else
ls
fi
;;
"cd")cd $operande;;
"exit")break;;
esac
break
done
echo "Saisir une commande (exit pour sortir)"
done

client.sh
#!/bin/bash

#Script permettant au client de communiquer avec le serveur

#ligne de commande pour éxécuter le script : sh serveur.sh adresse port

nc $1 $2

0