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 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 ! smile


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

Watael a écrit :

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 :

'info who' a écrit :
…
‘-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