Serveur FTP en bash

patrice86 Messages postés 1520 Statut Membre -  
patrice86 Messages postés 1520 Statut Membre -
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 =)

2 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    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
  2. patrice86 Messages postés 1520 Statut Membre 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