#1 Le 26/06/2021, à 17:36
- zephyre123
[RESOLU]Boucle while lecture d'une commande pas d'affichage du 1 champ
Bonjour,
Je dois faire le programme suivant :
Un utilisateur a la possibilité d’envoyer un message à un autre utilisateur
connecté sur la même machine à l’aide de la commande write.
Ecrire un programme shell acceptmess qui affiche le nom de tous les
utilisateurs connectés qui acceptent les messages.
J'ai commencé à faire le programme suivant :
#!/bin/bash
#!/bin/bash
who -T | while read prenom disponiblePourMessage autre
do
echo "$preom = premiereChamp de la ligne 1"
echo "$disponiblePourMessage = deuxiemeChamp de la ligne 1"
echo "$autre = troisiemeChamp de la ligne 1"
done
Je ne comprends pas pourquoi echo $prenom n'affiche pas le premier champ de la première ligne ?
Moi j'ai une ligne vide.
Le retour de ce script ci dessous :
./acceptmess.bash
= premiereChamp de la ligne 1
? = deuxiemeChamp de la ligne 1
:0 2021-06-26 17:47 (:0) = troisiemeChamp de la ligne 1
Le retour de la commande who -T :
who -T
pierre ? :0 2021-06-26 17:47 (:0)
Es ce que quelqu'un à une explication car je ne comprends vraiment pas pourquoi ?
Merci pour votre aide.
Dernière modification par zephyre123 (Le 04/07/2021, à 13:16)
Hors ligne
#2 Le 26/06/2021, à 17:43
- Watael
Re : [RESOLU]Boucle while lecture d'une commande pas d'affichage du 1 champ
parce que preom, ce n'est pas prenom !
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 26/06/2021, à 17:44
- zephyre123
Re : [RESOLU]Boucle while lecture d'une commande pas d'affichage du 1 champ
Oui je viens juste de m'en apercevoir !
Es ce que ce script répond à l'exercice :
#!/bin/bash
who -T | while read prenom disponiblePourMessage autre
do
if [ $disponiblePourMessage = + ]
then
echo "$prenom est diponible pour recevoir des message"
fi
done
Je ne peux pas le tester car la seule chose que me renvoi la commande who -T est la chose suivante :
who -T
pierre ? :0 2021-06-26 17:47 (:0)
Et je ne comprends pas pourquoi j'ai un point d’interrogation = ?
Le + signifie est prêt à recevoir des message
Le - signifie le contraire
Mais que signifie le '?'
Dernière modification par zephyre123 (Le 26/06/2021, à 17:50)
Hors ligne
#4 Le 26/06/2021, à 17:45
- abelthorne
Re : [RESOLU]Boucle while lecture d'une commande pas d'affichage du 1 champ
Tu as écrit $preom au lieu de $prenom dans ton script. Et il y a deux fois l'interpréteur au début (#!/bin/bash), je ne sais pas si ça peut avoir une conséquence.
Hors ligne
#5 Le 26/06/2021, à 17:50
- Watael
Re : [RESOLU]Boucle while lecture d'une commande pas d'affichage du 1 champ
il faut mettre chaque terme du test entre guillemets, TOUJOURS.
d'ailleurs, je préfère test plutôt que [ ].
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#6 Le 26/06/2021, à 17:53
- zephyre123
Re : [RESOLU]Boucle while lecture d'une commande pas d'affichage du 1 champ
il faut mettre chaque terme du test entre guillemets, TOUJOURS.
Pourquoi explique Watael.
Sinon deux questions sont en suspend :
- es ce que mon script répond au problème ?
- pourquoi j'ai un point d’interrogation dans la commande who -T ?
Hors ligne
#7 Le 26/06/2021, à 18:41
- Watael
Re : [RESOLU]Boucle while lecture d'une commande pas d'affichage du 1 champ
c'est une bonne pratique à adopter.
ici, le problème ne se pose pas, cependant, parfois le séparateur utilisé avec read ne fait pas parti de l'IFS par défaut, et alors une variable peut contenir plusieurs mots, et test ne saura pas différencier le contenu de la variable des ses opérateurs....
$ IFS=';' read v vv <<<'a b;c;d'
$ test $v = a b; echo $?
bash: test: trop d'arguments
2
$ test "$v" = "a b"; echo $?
0
$
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#8 Le 26/06/2021, à 18:46
- MicP
Re : [RESOLU]Boucle while lecture d'une commande pas d'affichage du 1 champ
Bonjour
… - pourquoi j'ai un point d’interrogation dans la commande who -T ?
Pour le savoir,
lance la ligne de commande suivante :
info who
Ci-dessous, un extrait de ce que l'on peut lire
dans le retour de la ligne de commande ci-dessus :
… ‘-T’ ‘--mesg’ ‘--message’ ‘--writable’ After each login name print a character indicating the user’s message status: ‘+’ allowing ‘write’ messages ‘-’ disallowing ‘write’ messages ‘?’ cannot find terminal device …
Dernière modification par MicP (Le 26/06/2021, à 18:46)
Hors ligne
#9 Le 26/06/2021, à 19:27
- zephyre123
Re : [RESOLU]Boucle while lecture d'une commande pas d'affichage du 1 champ
Merci Watael j'ai compris ce que tu veux dire.
Merci Micp j'avais regardé dans la man mais il n'y avait pas plus de précision que cela.
Es ce que mon script fonctionne je ne peux pas le tester ?
Objectif :
Un utilisateur a la possibilité d’envoyer un message à un autre utilisateur connecté sur la même machine à l’aide de la commande write.
Ecrire un programme shell acceptmess qui affiche le nom de tous les utilisateurs connectés qui acceptent les messages.
Le script en question :
#!/bin/bash
who -T | while read prenom disponiblePourMessage autre
do
if [ $disponiblePourMessage = + ]
then
echo "$prenom est diponible pour recevoir des message"
fi
done
Hors ligne