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 18/05/2014, à 14:47

yeth83

Aide projet shell/bash

Bonjour à tous et à toutes,

Nous avons un projet à faire, et nous sommes pas très bon en développement shell/bash.
Nous avons au préalable fait des recherches sur internet, sans grand succès. Donc nous avons décider de venir directement ici, pour voir s'il nous pouvions avoir de l'aide.

Nous travaillons avec VirtualBox, et Ubuntu d'installer (dernière version il me semble).

Je vous cite le début de l'énoncé du projet:

Vous allez interroger votre serveur par l’intermédiaire d’une nouvelle commande shell, nommée vsh, qui fonctionne selon les modes suivants:
1er mode: c'est le mode list :
vsh -list nom_serveur port
Cette commande permet d’afficher la liste des archives présentes sur le serveur. nom_serveur représente l’adresse du serveur et port le numéro du port sur lequel le serveur attend une requête.
2ème mode: c'est le mode browse :
vsh -browse nom_serveur port nom_archive
Cette commande vous permet d'explorer sur le serveur l'archive nom_archive en vous faisant entrer dans un mode shell vsh.
3ème mode: c'est le mode extract :
vsh -extract nom_serveur port nom_archive
Cette commande permet d'extraire le contenu de l'archive nom- archive dans le répertoire courant de la machine cliente.

Le soucis que nous rencontrons, est donc que nous ne savons pas ce qu'est vsh (virtual shell ??). A priori, notre terminal linux ne le connais pas non plus puisqu'avec la commande: man vsh, il trouve rien.
Après quelques recherche sur internet, ca reste flou, et rien de concret à ce sujet.

Comment voyez vous la chose ? Est-ce que VSH existe ? et les commandes en italique existe aussi ?
Quelques idées ?


Merci d'avance

Yeth83

Hors ligne

#2 Le 18/05/2014, à 14:55

melixgaro

Re : Aide projet shell/bash

salut yeth83

à mon avis, la commande vsh est la commande que tu/ton groupe dois/doit écrire dans le cadre de ce projet informatique.
L'énoncé décrit clairement le fonctionnement de cette commande en fonction des arguments donnés.

Voici une bonne documentation ici en français.

Bon courage


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#3 Le 18/05/2014, à 14:56

Brunod

Re : Aide projet shell/bash

Comme je comprends, vsh est le nom du programme shell que tu dois créer. Le reste est son cahier des charges.
EDIT : grillé smile

Dernière modification par Brunod (Le 18/05/2014, à 14:56)


Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis

Hors ligne

#4 Le 18/05/2014, à 15:02

yeth83

Re : Aide projet shell/bash

Merci pour vos réponses. C'était la première idée que je m'étais fais sur le projet.
Du coup, j'ai un problème. A un moment, il nous met un exemple d'utilisation de vsh et apparemment quand il lance le script, le prompt change en "vsh->" comment faire ?

Merci d'avance

Hors ligne

#5 Le 18/05/2014, à 16:05

melixgaro

Re : Aide projet shell/bash

je ne sais pas trop ce que cela signifie (il y a plusieurs possibilités/interprétations), mais par exemple :
si tu tapes ça dans un terminal :

read -p "vsh->" action

il y aura une invite nommée vsh->. Ce que tu taperas sera enregistré dans la variable action. Après, tu peux faire un case ou un if et faire ce qu'il faut en fontion de la valeur de action.


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#6 Le 18/05/2014, à 19:09

yeth83

Re : Aide projet shell/bash

@melixgaro:
Merci à toi.
Je pense que nous allons utilisé ça. En tout cas, ça nous a aidé.
Car je voyais mal comment modifier le prompt dans bashrc ^^

Pour le moment, on voit de mieux en mieux comment traiter le sujet.
Merci a vous pour l'instant.

Hors ligne

#7 Le 30/05/2014, à 21:59

yeth83

Re : Aide projet shell/bash

Petit up

Voici un type de fichier:

directory Exemple/Test/
A drwxr-xr-x 4096
B drwxr-xr-x 4096
toto1 -rwxr-xr-x 29 1 3
toto2 -rw-r--r-- 249 4 10
@
directory Exemple/Test/A
A1 drwxr-xr-x 4096
A2 drwxr-xr-x 4096
A3 drwxr-xr-x 4096
toto3 -rw-r--r-- 121 14 3
@
directory Exemple/Test/A/A1
toto4 -rw-r--r-- 0 17 0
@
directory Exemple/Test/A/A2
@
directory Exemple/Test/A/A3
@

Nommons se fichier : archive

En gras, ce sont les chemins des fichiers.

Je souhaiterais lire dans ce fichier, en refaisant les commandes "cd", "ls", "pwd".
Ainsi, quand avec mon script je choisi l'archive:
./script archive
j'obtiens un prompt:
vsh -->

L'idée est que ça lise (sans passé par une copie de l'archive, donc directement) l'archive.
Si je rentre:
vsh --> pwd
j'obtiens la racine de l'archive:
/

etc ... avec les autres commandes.

Mon premier problème, est (je sais pas si je pars sur la bonne voie) que je crée une variable:

#! /bin/bash
while true
do
echo -n "vsh->"
read ligne argument1

chemin=/;

#Commande pwd
        if [[ "$ligne" == "pwd" ]]
        then
        echo $chemin;
        fi
#Commande cd
        if [[ "$ligne" == "cd" ]]
        then
        test="$chemin $argument1";
        echo $test;
        fi

Mon soucis est donc que je n'arrive pas a actualisé la variable qui contient le chemin.
Du coup, si je fais un cd Test et que je fais un "pwd", j'obtiendrais seulement "/" et non le chemin /Test.

Bien entendu je ne fais pas encore la vérification concernant l'existence des fichiers dans le fichier archive.
Je pense utilisé du sed et du grep, ainsi que awk.

Des idées ? suggestions ? Déjà concernant le fait d'avoir une variable qui s'actualise.

Merci smile

Hors ligne

#8 Le 24/05/2018, à 15:03

jason

Re : Aide projet shell/bash

Bonjour je susi desolé de deterrer ce sujet mais j'ai le même projet en etude et j'aurais une question à vous poser s'il vous plait:
* Pour la commande cd losrque nous somme dans le shell vsh,lorsque l'utilisateur tape  'cd' j'appelle un script qui s'appelle cmd_cd.sh  dans lequel j'ai essayé de voir tous les cas possibles et essentiellement lorsque nous sommes à la limite de notre achive. Par exmple supposons que mon dossier contenant toutes mes archives s'appelle archives/;
lorsque je fais un "cd .." je dois rester dans archives/ et ne jamais en sortir pendant tout le temps de ma connection au serveur , chose que je n'arrive pas à  faire. Je vous presente mon code. ps : le code se trouve sur le serveur et je l'execute en le sourçant:

cmd_cd.sh


#!/bin/bash
if [[ -e $1 ]] && [[ -d $1 ]]

then
cd $1
fi

if [[ -f $1 ]]
then
        echo "erreur veuillez entrer un dossier s'il vous plait"
 fi
if [[ -z $(echo $1 | grep '[\.\.\/]*') ]]

then
        cd $1
echo $?
        if [ $(echo `pwd` | grep -q "archives"; echo $?) -eq 1 ]
        then
    echo $?
                cd
                else
                :
        fi
fi

if [[ -z $1 ]]
then
        cd $HOME
fi
case  $1 in
 "/")
   pushd $HOME
     ;;
   " ")
    pushd $HOME
     ;;
      *)
      :
     ;;
esac


Mon code n'est certainement pas optimal je le sais mais j'essaie de faire en sorte de rester toujours dans le dossier archives/  et ne jamais en sortir.
Merci à vous pour le temps que vous m'accorderiez et pour votre aide.


Modération : merci d'utiliser les balises code (explications ici).

Dernière modification par cqfd93 (Le 24/05/2018, à 15:12)

Hors ligne