Ecriture d 'un scrip shell

Fermé
melissa777 - 25 déc. 2009 à 22:46
melissa777 Messages postés 14 Date d'inscription vendredi 25 décembre 2009 Statut Membre Dernière intervention 4 janvier 2010 - 29 déc. 2009 à 14:04
Bonjour,Merci de m'aider pour realiser ce trvail, vraiment je trouve ça c'est difficile j ai essayer et jusqu'a mnt j'arrive pas.


mon probleme consiste à réaliser un ensemble client-serveur permettant la “suveillance”
des personnes connectées sur une machine. Pour cela, nous allons procéder en
plusieurs étapes:
1. Tout d’abord, on vous demande de réaliser un petit script qui écoute sur
l’entrée standard en l’attente de commande et renvoie la réponse sur la
sortie standard.
On demande d’implémenter les commandes suivantes :
 NAME : indique le nom de la machine;
 UPTIME : affiche depuis combien de temps la machine est en marche;
 USERS : affiche le nom des utilisateurs connectés à la machine;
 QUIT : termine le script
2. En utilisant votre script écrit précédement et à l’aide de la commande
netcat, faites en sorte que votre script soit lancé en tant que serveur sur
la machine (on regardera en particulier l’option -c) et qu’il soit relancé
lorsqu’une connection se termine.
3. Écrivez alors un client qui prend en entrée une liste de machine et affiche
les utilisateurs présents sur ces machines en contactant les serveurs sur ces
machines.
A voir également:

8 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
25 déc. 2009 à 22:51
0
melissa777 Messages postés 14 Date d'inscription vendredi 25 décembre 2009 Statut Membre Dernière intervention 4 janvier 2010
25 déc. 2009 à 22:59
bonjour
je ne demande pas une sollution complete;mais au moins les grandes lignes de comment commencer;
j'ai essayer mais j'ai pas arrivé
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897 > melissa777 Messages postés 14 Date d'inscription vendredi 25 décembre 2009 Statut Membre Dernière intervention 4 janvier 2010
25 déc. 2009 à 23:02
j'ai essayer mais j'ai pas arrivé
Ben justement t'as essayé quoi ?

Ne serait-ce que ça, nous indiquera que tu as au moins essayé...
0
melissa777 Messages postés 14 Date d'inscription vendredi 25 décembre 2009 Statut Membre Dernière intervention 4 janvier 2010 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
25 déc. 2009 à 23:32
j'ai essayer de faire une lecture et comprendre : que lors de l'execution d'une commande un processus est crée, celui ci va alors ouvrir 03 flux:
1.l'entrée standard dans lequel le processus va lire des données entrées par defaut qui est idetifié par 0 qui est le clavier.
2. la sortie standard numero 1et qui reprsente l'ecranr
3.la sortie standard d'erreur qui est 2
j'ai lu aussi comment redirgier les resultats c'est avec >1
aussi j ai compri que les users sont entregistrés dans /etc/passwrd

mais comment ecouter quel port utiliser quel protocol j arrive pas a comprendre
0
melissa777 Messages postés 14 Date d'inscription vendredi 25 décembre 2009 Statut Membre Dernière intervention 4 janvier 2010 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
26 déc. 2009 à 00:03
bsr,*est ce que vous pouvez me guider pour trouver une sollution?
0
melissa777 Messages postés 14 Date d'inscription vendredi 25 décembre 2009 Statut Membre Dernière intervention 4 janvier 2010 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
27 déc. 2009 à 11:45
je suis nouvelle ds la programmation shell c est mon premier essai pour lecoute sur lentrée standard en attente d'une commande et l envoi sur la sortie standar

#!/bin/sh
#monpremieressai
echo "j'ecoute sur l'entrée standard"
cat << | 1>
0
melissa777 Messages postés 14 Date d'inscription vendredi 25 décembre 2009 Statut Membre Dernière intervention 4 janvier 2010
27 déc. 2009 à 11:46
y a t'il quelq'un qui m aide?
0
Salut,

Par exemple
$ cat attente_stdin.sh 
#!/bin/bash

echo -n "echo j'ecoute sur l'entrée standard (il faut entrer une commande) : "
read commande
eval $commande
$ ./attente_stdin.sh 
echo j'ecoute sur l'entrée standard (il faut entrer une commande) : ls
attente_stdin.sh  choix.sh  division.sh
$ ./attente_stdin.sh 
echo j'ecoute sur l'entrée standard (il faut entrer une commande) : ls -l
total 12
-rwxr-xr-x 1 lami20j lami20j 122 déc.  27 11:50 attente_stdin.sh
-rw-r--r-- 1 lami20j lami20j 466 déc.  26 17:07 choix.sh
-rwxr-xr-x 1 lami20j lami20j 168 déc.  26 17:24 division.sh
$ 
0
melissa777 Messages postés 14 Date d'inscription vendredi 25 décembre 2009 Statut Membre Dernière intervention 4 janvier 2010
27 déc. 2009 à 13:12
merci pour vos reponses
est ce que read commande me permet uniquement de lire une commande c est a dire le fait d'crire commande le compilateur comprend que c est une commande?
pourqoui vous avez utilisez eval $commande?
et pourquoi $../attente_stdin.sh?
merci encore uen fois pour m eclaircir
0
Salut,


mais comment ecouter quel port utiliser quel protocol j arrive pas a comprendre
Dans le fichier /etc/services tu trouveras les services et le port attribué.

Par exemple si tu mets en place un serveur web le port 80 sera à l'écoute pour http et 443 pour https.
Dans la configuration de serveur tu peux par exemple changer le port d'écoute.

Par exemple sur mon serveur local j'ai mis 81
La commande netstat me permet de voir ça.
lami20j@debian:~$ su -c 'netstat -lpn | grep ":81\>"'
Mot de passe : 
tcp6       0      0 :::81                   :::*                    LISTEN      2944/apache2   


Voici un lien sympa http://christian.caleca.free.fr/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Salut,

J'ai pense pouvoir t'aider sur un problème ponctuel, mais je vois que tu as besoin d'un vrai cours, et je ne plaisante pas.

est ce que read commande me permet uniquement de lire une commande c est a dire le fait d'crire commande

read permet de lire une chaîne au clavier (ça c'est

le compilateur comprend que c est une commande?
Il s'agit d'un langage interprété et pas compilé

pourqoui vous avez utilisez eval $commande?
eval a permis d'évaluer la chaîne saisie comme une commande et pas comme une simple chaîne de caractère.

Sans eval j'aurai écrit echo $commande et en ce moment c'est la chaîne que j'ai saisi qu'aurait été affichée.


et pourquoi $../attente_stdin.sh?
Lis cette article exécuter un script shell
0
melissa777 Messages postés 14 Date d'inscription vendredi 25 décembre 2009 Statut Membre Dernière intervention 4 janvier 2010
28 déc. 2009 à 01:19
bonsoir;
Merci pour les explication
j'ai lu l'article et j'ai compris que
./attente_stdin.sh c'est la façon de lancer l'execution d'un script; et meme pour eval j'ai lu et j'ai compri pourqoui il faut faire eval $commande;
mais reste le probleme d'où vient ce fichier attente_stdin.sh ? est ce que c'est a moi de l'ecrire et le lancer pour l'ecoute et je lui donne comme nom attente_stdin.sh

#!/bin/sh
#fichier d' ecoute d'une commande
read commande
eval $commande

et si oui comment je peux renvoer la reponse sur la sortie standard? est ce que uniquement j'ajoutte la redirection de la commande comme suit:
eval $commande >1

merci et je m'exuse pour ce derangement reptitif car je suis totalemnt nouvelle ds ce domaine
0
Salut,

mais reste le probleme d'où vient ce fichier attente_stdin.sh ? est ce que c'est a moi de l'ecrire et le lancer pour l'ecoute et je lui donne comme nom attente_stdin.sh

Oui, bien sûr que c'est à toi de l'écrire et tu peux lui donner n'importe quel nom.
D'après toi chez moi comment il est arrivé? ;-)) Je l'ai écrit tout simplement.

Pour ça tu dois utiliser un éditeur de texte sans mise en forme (kate,gedit, kwrite,nano,vi,emacs, scite, etc.)

comment je peux renvoer la reponse sur la sortie standard? est ce que uniquement j'ajoutte la redirection de la commande comme suit:
eval $commande >1

Non, la sortie standard STDOUT c'est l'écran donc c'est par défaut il n'y a pas de redirection à faire si tu ne veux pas écrire autre part.
En revanche si la sortie standard tu veux l'écrire dans un autre fichier alors tu dois utiliser les redirections

Par exemple j'ai ouvert deux terminaux (la commande tty te donne le nom du fichier du terminal)
/dev/pts/0 et /dev/pts/1

Sur /dev/pts/0 je fait
lami20j@debian:~$ tty
/dev/pts/0
lami20j@debian:~$ echo salut ici vers sortie standard
salut ici vers sortie standard
lami20j@debian:~$ echo salut vers /dev/pts/1 > /dev/pts/1
lami20j@debian:~$ echo salut vers fichier salut.txt > salut.txt 
lami20j@debian:~$ cat salut.txt 
salut vers fichier salut.txt


Sur /dev/pts/1 je vois
lami20j@debian:~$ tty
/dev/pts/1
lami20j@debian:~$ salut vers /dev/pts/1

Lit man bash le chapitre REDIRECTIONS
0
melissa777 Messages postés 14 Date d'inscription vendredi 25 décembre 2009 Statut Membre Dernière intervention 4 janvier 2010
28 déc. 2009 à 11:41
Bonjour ;
j'i lu les redirections ; merci pour votre orientation
est ce que ce code est suffisant pour repondre à ma demande qui est "un petit script qui écoute sur
l’entrée standard en l’attente de commande et renvoie la réponse sur la
sortie standard."

le code est le suivant :
#!/bin/sh
#"j'ecoute sur l'entrée standard en attente d'une commande "
read commande
eval $commande


et si il est suffisant est ce que vous pouvez m'orienter comment implementer les commandes suivantes

NAME : indique le nom de la machine;
UPTIME : affiche depuis combien de temps la machine est en marche;
USERS : affiche le nom des utilisateurs connectés à la machine;

à noter que j'ai doccumenter sur linux et j'ai lu que
le repertoire /etc contient les fichier de configuration (fichiers passwrd group initab.....) mais j'arrive pas à exploiter ces informations pour arriver a implementer les commandes citées.

merci pour m'accorder de votre temps...
0
Salut,

Voir dans les pages man pour les commandes
uptime
hostname
w
who



en l’attente de commande et renvoie la réponse sur la
sortie standard."

Si tu ne veux pas exécuter la commande mais juste l'affichée alors mets
echo $commande au lieu de eval $commande
0
melissa777 Messages postés 14 Date d'inscription vendredi 25 décembre 2009 Statut Membre Dernière intervention 4 janvier 2010
28 déc. 2009 à 14:05
merci pour l'orientation

pour la command who
j'ai deja fait ça

#!/bin/sh
echo "who |wc -l>utilistaursactuels.sh
j'ai enregistré le fichier sous le nom utilsateursactuels.sh

aprés j ai fait chmod +a +x utilisateursactuels.sh pour le rendre comme une commande du shell

et quand j'excecute ./utilisteursactuels normalement ça marche mais j'ai pas l'envirinement linux pour essayer ce scrip

pour les autres je vais essayer et si tu as plus d'orientatiosn merci.
0
melissa777 Messages postés 14 Date d'inscription vendredi 25 décembre 2009 Statut Membre Dernière intervention 4 janvier 2010
29 déc. 2009 à 14:04
Bonjour
est ce que la sollution cest ce que j ai ecris en dessous?
Merci
0