Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Commande set
Envoyé par: HeKe

Hello,

Je suis en train de suivre un tuto sur la programmation shell.
Dans la version pdf il y a des exercices pour se faire la main, mais il ne donne pas les solutions.
C'est dommage parce que je suis bloqué sur l'exercice qui concerne la commande set :

Exercice 3 : Ecrire un programme shell nbmots qui demande à l'utilisateur de saisir une suite
quelconque de mots puis affiche le nombre de mots saisis.

Ex : $ nbmots
Entrez une suite de mots : un deux trois quatre cinq
5 => 5 mots ont été saisis


Autant avec la commande read tout ce passe bien vu que c'est son rôle de récupérer des données saisies.
Mais là je ne vois pas comment récupérer une suite de mots pour les enregistrer en tant que valeur $1, $2, ...

Quelqu'un saurait m'orienter vers la solution ?

D'avance merci.

Poste le Sunday 22 March 2009 21:31:49
Répondre     Citer    
Re: Commande set
Envoyé par: NBaH

La réponse se trouve, pour ce qui concerne la version PDF, dans l'exemple, juste au-dessus de la question !

Poste le Monday 23 March 2009 00:50:53
Répondre     Citer    
Re: Commande set
Envoyé par: gil390

Salut, voici ma solution:

#!/bin/bash
read -p "Entrez une suite de mots:" a
set $a
echo $#

a+
Gil

Poste le Monday 23 March 2009 13:56:04
Répondre     Citer    
Re: Commande set
Envoyé par: NBaH

C'est aussi ce que j'ai vu.
C'est bien `read -p` !

Poste le Monday 23 March 2009 14:10:10
Répondre     Citer    
Re: Commande set
Envoyé par: gil390

Attention, l'option -p de la commande 'read' permet d'afficher une chaine avant
la saisie de l'operateur.
Cela fonctionne très bien aussi de la maniere suivante:

#!/bin/bash
echo "Entrez une suite de mots"
read a
set $a
echo $#

l'affectation aux paramètres $1, $2, ... du contenu de 'a' ($a) s'effectue par la commande 'set $a'

voila voila
Gil

Poste le Monday 23 March 2009 15:13:23
Répondre     Citer    
Re: Commande set
Envoyé par: HeKe

gil390 a écrit:
-------------------------------------------------------
> Salut, voici ma solution:
>
> #!/bin/bash
> read -p "Entrez une suite de mots:" a
> set $a
> echo $#

Ahah je suis blasé !
En fait je me doutait bien que c'était via l'option "read" qu'il fallait le faire.
J'ai fait le test directement dans le terminal par flemme de me faire un script :
~$ read bidule
truc machin blabla
~$ set $bidule
~$ echo $bidule
1

Au vu du résultat, je me suis dit ah ben non c'est pas ça !!

Maintenant je me pose une question pourquoi ça marche via un script et non pas directement dans le terminal ?
La programmation "Shell" c'est typiquement un langage séquentiel.
Si je le saisie à la mano ce devrait être équivalent, non !
Y'a une subtilité qui m'échappe c'est ça ?

Poste le Monday 23 March 2009 17:30:12
Répondre     Citer    
Re: Commande set
Envoyé par: NBaH

que dit :
echo $0

Poste le Monday 23 March 2009 17:35:24
Répondre     Citer    
Re: Commande set
Envoyé par: gil390

Et bien c'est fun, car chez moi, ta solution via le shell (sans script) fonctionne.

Poste le Monday 23 March 2009 17:36:22
Répondre     Citer    
Re: Commande set
Envoyé par: gil390

gil390 a écrit:
-------------------------------------------------------
> Et bien c'est fun, car chez moi, ta solution via
> le shell (sans script) fonctionne.

Oupps ! Pardon ! Je viens de relire ... et ton soucis dans ton shell:

~$ read bidule
truc machin blabla
~$ set $bidule
~$ echo $bidule

C'est le "echo $bidule" qui d'ailleurs ne doit pas donner 1 ??? mais "truc machin blabla"

Poste le Monday 23 March 2009 17:38:00
Répondre     Citer    
Re: Commande set
Envoyé par: HeKe

gil390 a écrit:
-------------------------------------------------------
> Et bien c'est fun, car chez moi, ta solution via
> le shell (sans script) fonctionne.

Ok c'est bon tout s'explique, en fait mon shell est zsh...
% echo $#
1
% echo $1
truc machin blabla


Avec bash ça fonctionne.
% echo $#
3
% echo $1
truc machin blabla

----

Je pensais pas qu'il y a tant de différence entre ces 2 shells, par exemple dans le tuto il est dit qu'avec "bash" on ne peut pas faire :

ATTENTION : on ne peut utiliser ni le symbole =, ni la commande interne read pour affecter directement une valeur à un paramètre de position.

$ 23=bonjour
-bash: 23=bonjour: command not found
$
$ read 4
aa
-bash: read: `4': not a valid identifier
$



Si la valeur du premier argument de set commence par un caractère - ou +, une erreur se produit. En effet, les options de cette commande interne commencent par un de ces deux caractères. Pour éviter que ce type d’erreur ne se produise, on utilise la syntaxe : set -- arg ...

$ a=+qui
$ set $a
-bash: set: +q: invalid option
set: usage: set [--abefhkmnptuvxBCHP] [-o option] [arg ...]
$ set -- $a
$
$ echo $1
+qui
$


Avec zsh ça passe sans problème!

Merci bien pour le coup de main, je tournai un peu en rond :-)

Poste le Monday 23 March 2009 18:31:02
Répondre     Citer    
Re: Commande set
Envoyé par: HeKe

HeKe a écrit:
-------------------------------------------------------
> Avec bash ça fonctionne.
> % echo $#
> 3
> % echo $1
> truc
> % echo $2
> machin
> % echo $3
> blabla

Pardon j'ai fait une erreur de saisie.

Poste le Monday 23 March 2009 18:35:03
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
Commande set
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons