OVH Cloud OVH Cloud

Manuel simple pour apprendre les scripts bash

16 réponses
Avatar
Richard Lemay
Bonjour à tous,

J'aimerais savoir si quelqu'un peut me conseiller un manuel qui pourrait
m'expliquer comment construire des scripts bash simples. C'est que les
pages de manuel (man bash, man sh) sont un peu obscures quand on commence.

Je cherche à construire un script simple qui execute une commande si
aucun paramètre n'est donné après la commande et une autre si un
paramètre est donné.

Ainsi, par exemple:
si je tappe
> go.acrobat-reader
il execute /home/apps/acrobat-reader/bin/acroread
et si je tappe
> go.acrobat-reader "/go/temp/document amusant.pdf"
il execute /home/apps/acrobat-reader/bin/acroread \
"/go/temp/document amusant.pdf"

Je sais qu'en DOS/Windows, on peut utiliser une commande du style:
> if %1 "" <commande>
> if %1 NOT "" <commande>

En bash, il semble qu'on ne procède pas ainsi. Il semble vouloir
exécuter $1, ce qui n'est évidemment pas ce que je cherche. J'en
conclus, de manière justifiée, que je ne comprend rien à la
programmation de scripts bash et que je dois apprendre :).

C'est pourquoi j'aimerais faire un peu de lecture pour me documenter sur
le sujet. Y aurait-il quelqu'un pour me conseiller un document
d'introduction à cette véritable magie noire? :)

Merci,
Richard


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org

6 réponses

1 2
Avatar
Richard Lemay
Merci beaucoup pour ces informations.
J'en prend bonne note! :)
Je salive presque à l'idée de tous les beaux scripts que je vais pouvoir
me faire avec cette commande... mais bon, ça c'est mon problème si j'y
trouve un certain plaisir! :D

Richard


Jean-Damien Durand a écrit :
"$@" equivaut a "$1" "$2" "$3" etc... C'est dans le man de bash.

Certains shells (je ne sais pas lesquels en fait) peuvent retourner une chaine vide
au lieu de rien du tout quand on fait "$@" et qu'il n'y a pas d'argument. Et ca serait
une erreur. C'est pour ca que la syntaxe ${cettevariable+cettevaleur} est utilisee: elle
retourne cettevaleur si cettevariable existe, sinon rien - une syntaxe qui fonctionne
apparemment correctement dans tous les shells (jamais verifie). Donc si $1 existe alors
tu auras en retour "$1" "$2" "$3" etc..., sinon rien (mais vraiment rien).

A+, JD.

qui te retourne la liste complete des arguments
avec "" autour de chaque argument - sinon, si tu avais un argument qui contient
un espace
FB > > Sauf que cette commande (acroread ${1+"$@"} m'intrigue. Elle semble
FB > > faire exactement ce que je veux en une ligne. Je vais devoir trouver de
FB > > la documentation pour me l'expliquer :).
FB >
FB > Elle fait je crois exactement ce que tu veux, mais c'est assez illisible. C'est
FB > une formule "connue" que j'avais pêché dans un script, et que je garde
FB > sous le coude. Mais je n'en ai pas vu d'explication dans la page manuel de 'bash'...
FB >
FB > Fred.
FB >
FB >





--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
pascal
Steve a écrit :
salut,




Es-tu aller voir sur Léa : http://lea-linux.org/dev/
La partie "Une introduction aux scripts du shell" devrait être une bon
commencement.





et continuer par http://abs.traduc.org/abs-3.0-fr/


Antoine





steve



Et terminer par

http://abs.traduc.org/abs-3.5-fr/
:)
Pascal
--
"Pour voir le monde dans un grain de sable
Et les cieux dans une fleur
Capturez l'infinité dans la paume de votre main
Et l'éternité dans une heure." William Blake



--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Sylvain Sauvage
Mercredi 15 juin 2005, 16:12:13 CEST, Frédéric BOITEUX a écrit :

Le Wed, 15 Jun 2005 09:34:16 -0400, Richard Lemay
a écrit :

> J'ai fais un peu de lecture et j'ai construit le script suivant qui
> fonctionne bien:
>
>
> #!/bin/sh
> case "$1" in
>
> "") /home/apps/acrobat-reader/bin/acroread
> ;;
>
> *) /home/apps/acrobat-reader/bin/acroread "$1"
> ;;
>
> esac

Oui, mais si tu as plusieurs fichiers en arguments ?

> Sauf que cette commande (acroread ${1+"$@"} m'intrigue. Elle semble
> faire exactement ce que je veux en une ligne. Je vais devoir trouver
> de la documentation pour me l'expliquer :).

Elle fait je crois exactement ce que tu veux, mais c'est assez
illisible. C'est une formule "connue" que j'avais pêché dans un scrip t,
et que je garde sous le coude. Mais je n'en ai pas vu d'explication
dans la page manuel de 'bash'...



Mais si on la trouve, dans la section « EXPANSION », sous-section
« remplacement des paramètres ». (En anglais : EXPANSION/Parameter
expansion.)

Voilà un résumé :
${1+"$@"} = si $1 n'existe pas, on ne met rien, sinon on met "$@"
($@ = tous les arguments, les guillemets permettent de protéger les
arguments un par un (c'est comme si on écrivait "$1" "$2" ...)).

(À noter que, normalement, c'est ${1:+"$@"}.)

En général, "$@" me suffit. Je ne me souviens pas avoir eu de problème
s'il n'y avait pas du tout d'argument.

La gestion des guillemets est toujours assez... amusante... à comprendre.

for f in *.txt; do cat $f; done

for f in "*.txt"; do cat $f; done

for f in *.txt; do cat "$f"; done

for f in "*.txt"; do cat "$f"; done

Et si on y ajoute les ''... ;oP

--
Sylvain Sauvage
Avatar
Steve
>Steve a écrit :
salut,




Es-tu aller voir sur Léa : http://lea-linux.org/dev/
La partie "Une introduction aux scripts du shell" devrait être une




bon >>commencement.





et continuer par http://abs.traduc.org/abs-3.0-fr/


Antoine





steve



Et terminer par


^^^^^^ ---> poursuivre?


http://abs.traduc.org/abs-3.5-fr/



aïe, mes signets prennent de l'âge :-)

merci de me remettre à jour

:)



:-) de même

Pascal



s.
Avatar
Frédéric BOITEUX
Salut,

Le Wed, 15 Jun 2005 17:20:20 +0200, Jean-Damien Durand <Jean-Damien.Durand@ cern.ch> a écrit :

"$@" equivaut a "$1" "$2" "$3" etc... C'est dans le man de bash.



Ça, d'accord !


Certains shells (je ne sais pas lesquels en fait) peuvent retourner une c haine vide
au lieu de rien du tout quand on fait "$@" et qu'il n'y a pas d'argument. Et ca serait
une erreur. C'est pour ca que la syntaxe ${cettevariable+cettevaleur} est utilisee: elle
retourne cettevaleur si cettevariable existe, sinon rien - une syntaxe qu i fonctionne
apparemment correctement dans tous les shells (jamais verifie). Donc si $ 1 existe alors
tu auras en retour "$1" "$2" "$3" etc..., sinon rien (mais vraiment rien).



C'est de cette syntaxe particulière dont je parlais. J'ai jeté un coup d'oeil au man de bash
sans en trouver l'explication (mais bon je suis encore en Woody...)


Merci de l'info,
Fred.
Avatar
lehmann
On mer, 2005-06-15 at 00:27 -0400, Richard Lemay wrote:
Bonjour à tous,

J'aimerais savoir si quelqu'un peut me conseiller un manuel qui pourrait
m'expliquer comment construire des scripts bash simples. C'est que les
pages de manuel (man bash, man sh) sont un peu obscures quand on commence.



[couic!]

Plusieurs liens intéressants dans cette page :
http://debianworld.org/?q=node/12

Bonne nuit
GL



--
Pensez
1 2