Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

faq ? petit guide script shell

28 réponses
Avatar
mpg
Bonjour,

J'ai un peu honte de poser cette question, tellement ça doit être une faq de
débutant, mais bon. J'aimerai apprendre un peu à écrire des scripts shell
pour automatiser des petits trucs, mais je ne sais pas bien par où
commencer. J'aimerais trouver (si possible en ligne, sinon en libraire) un
guide pour apprendre. Je décris ce que serait le guide idéal pour moi :

- il serait assez petit pour être lisible, ou (encore mieux) comporterait
une premier chapitre permettant de commencer rapidement avant
d'approfondir. Cela élimine des truc comme l'advanced bash scripting guide.

- il décrirait le shell POSIX, plutôt qu'un shell comme bash ou zsh, plus
pratique sans doute mais moins standard. Ceci élimine aussi la page de man
de mon shell local

- il orienterait dès le début vers un style propre et sûr de codage.

- ce qui serait génial, c'est qu'il parle aussi un peu des outils unix comme
awk, sed, cut, ou que sais-je, ou au moins qu'il mentionne leur existence
et leurs emplois, après je peux lire la page de man.

Si vous connaissez une telle merveille, ou quelque chose d'approchant, vous
avez droit à toute ma reconnaissance :)

Manuel.

10 réponses

1 2 3
Avatar
Thierry B.
--{ mpg a plopé ceci: }--

Si vous connaissez une telle merveille, ou quelque chose d'approchant, vous
avez droit à toute ma reconnaissance :)

"Introduction aux scripts shell" chez O'Reilly. Je pense que

ça correspond très bien à ta demande.

--
Press any key to continue or any other key to quit

Avatar
Matthieu Moy
mpg writes:

J'ai un peu honte de poser cette question, tellement ça doit être une faq de
débutant, mais bon. J'aimerai apprendre un peu à écrire des scripts shell
pour automatiser des petits trucs, mais je ne sais pas bien par où
commencer.


Je me posais la même question (mais pas pour moi, pour mes
étudiants ;-) ), et la réponse que j'ai trouvé pour l'instant est :

http://lea-linux.org/cached/index/Dev-shell_script.html

Simple, et suffisant complet pour commencer AMA.

--
Matthieu

Avatar
Jean-Francois BILLAUD
Matthieu Moy wrote:

J'ai un peu honte de poser cette question, tellement ça doit être une faq de
débutant, mais bon. J'aimerai apprendre un peu à écrire des scripts shell
pour automatiser des petits trucs, mais je ne sais pas bien par où
commencer.


Je me posais la même question (mais pas pour moi, pour mes
étudiants ;-) ), et la réponse que j'ai trouvé pour l'instant est :

http://lea-linux.org/cached/index/Dev-shell_script.html

Simple, et suffisant complet pour commencer AMA.


Oui, on y apprend comment faire une sauvegarde de mon_fichier
et de monfichier.bak dans le répertoire d'origine.


JFB

--
On ne devrait pas travailler le lendemain des jours de repos.


Avatar
jean-jacques
mpg wrote:

Bonjour,

J'ai un peu honte de poser cette question, tellement ça doit être une faq
de débutant, mais bon. J'aimerai apprendre un peu à écrire des scripts
shell pour automatiser des petits trucs, mais je ne sais pas bien par où
commencer. J'aimerais trouver (si possible en ligne, sinon en libraire) un
guide pour apprendre. Je décris ce que serait le guide idéal pour moi :

- il serait assez petit pour être lisible, ou (encore mieux) comporterait
une premier chapitre permettant de commencer rapidement avant
d'approfondir. Cela élimine des truc comme l'advanced bash scripting
guide.
un petit bouquin exceptionnel pour les débutants chez campuspress par dave

taylor (mais traduit) dans la collection le tout en poche :
UNIX

--
cordialement jean-jacques.
Ce message a été écrit sur un système libre mandriva
"Tant que l'homme sera mortel, il ne pourra pas être totalement
décontracté ."
Woody Allen.

Avatar
Vincent Lefevre
Dans l'article ,
Matthieu Moy écrit:

Je me posais la même question (mais pas pour moi, pour mes
étudiants ;-) ), et la réponse que j'ai trouvé pour l'instant est :

http://lea-linux.org/cached/index/Dev-shell_script.html

Simple, et suffisant complet pour commencer AMA.


Surtout mauvais. Un de leurs premiers scripts contient une erreur
classique, qui peut mener à des trous de sécurité et des pertes de
données:

#!/bin/sh
# on veut faire un copie de tous les fichiers
for i in * ; do
# sous le nom *.bak
cp $i $i.bak
done

Il faut prendre l'habitude de mettre des quotes!

#!/bin/sh
# on veut faire un copie de tous les fichiers
for i in * ; do
# sous le nom *.bak
cp "$i" "$i.bak"
done

est plus correct (il faudrait également s'occuper des fichiers dont
le nom est déjà en .bak, afin d'éviter que certains fichiers soient
écrasés).

Il y a des cas (de moins en moins nombreux) où on peut savoir que
l'absence de quotes ne posera pas de problèmes, mais un tutoriel
n'est pas censé donner de mauvaises habitudes, surtout quand la
sécurité entre en jeu.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

Avatar
Matthieu Moy
Vincent Lefevre <vincent+ writes:

Il faut prendre l'habitude de mettre des quotes!

#!/bin/sh
# on veut faire un copie de tous les fichiers
for i in * ; do
# sous le nom *.bak
cp "$i" "$i.bak"
done


Bien vu.

Le site est un wiki, j'ai corrigé ça (pas encore dispo en ligne, c'est
un wiki avec modération a priori). Si tu as d'autres remarques,
n'hésites pas à les corriger ou à les signaler.

Sinon, si tu connais un meilleur exemple de tutorial court et
accessible aux débutants, je suis prenneur. C'est pas évident de faire
un truc à la fois simple et correct !

--
Matthieu

Avatar
Stephane Chazelas
2007-11-7, 10:55(+00), Vincent Lefevre:
[...]
Il faut prendre l'habitude de mettre des quotes!

#!/bin/sh
# on veut faire un copie de tous les fichiers
for i in * ; do
# sous le nom *.bak
cp "$i" "$i.bak"
done


Et separer les arguments des options!

#!/bin/sh -
# on veut faire un copie de tous les fichiers
for i in * ; do
# sous le nom *.bak
cp -- "$i" "$i.bak"
done

Et ca ne copie pas tous les fichiers. Seulement ceux dont le nom
ne commence pas par un ".", c.a.d. pas les fichiers cachés.

est plus correct (il faudrait également s'occuper des fichiers dont
le nom est déjà en .bak, afin d'éviter que certains fichiers soient
écrasés).

Il y a des cas (de moins en moins nombreux) où on peut savoir que
l'absence de quotes ne posera pas de problèmes, mais un tutoriel
n'est pas censé donner de mauvaises habitudes, surtout quand la
sécurité entre en jeu.


Very true. Et la plupart des resources sur le sujet oublient
malheureusement souvent ces principes de base.

--
Stéphane

Avatar
Vincent Lefevre
Dans l'article ,
Matthieu Moy écrit:

Le site est un wiki, j'ai corrigé ça (pas encore dispo en ligne, c'est
un wiki avec modération a priori). Si tu as d'autres remarques,
n'hésites pas à les corriger ou à les signaler.


Je n'ai pas trop le temps en ce moment. Je signale juste:

Pour faire un calcul il faut encadrer celui-ci de : $(( un calcul ))
ou $[ un calcul ].

Mais le man de bash dit:

Arithmetic Expansion
Arithmetic expansion allows the evaluation of an arithmetic expression
and the substitution of the result. The format for arithmetic expan-
sion is:

$((expression))

The old format $[expression] is deprecated and will be removed in
upcoming versions of bash.

Je suppose donc que cette seconde forme n'est pas POSIX (à vérifier).

Note: zsh sait faire du calcul en flottant, mais c'est évidemment une
extension.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

Avatar
Vincent Lefevre
Dans l'article ,
Stephane Chazelas écrit:

Et separer les arguments des options!

#!/bin/sh -
# on veut faire un copie de tous les fichiers
for i in * ; do
# sous le nom *.bak
cp -- "$i" "$i.bak"
done


Oui, effectivement!

Et ca ne copie pas tous les fichiers. Seulement ceux dont le nom
ne commence pas par un ".", c.a.d. pas les fichiers cachés.


Oui.

Voilà en gros une des raisons pour lesquelles j'ai tendance à ne plus
écrire de script shell, mais à faire du Perl à la place.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

Avatar
Stephane Chazelas
2007-11-7, 12:18(+00), Vincent Lefevre:
Dans l'article ,
Matthieu Moy écrit:

Le site est un wiki, j'ai corrigé ça (pas encore dispo en ligne, c'est
un wiki avec modération a priori). Si tu as d'autres remarques,
n'hésites pas à les corriger ou à les signaler.


Je n'ai pas trop le temps en ce moment. Je signale juste:

Pour faire un calcul il faut encadrer celui-ci de : $(( un calcul ))
ou $[ un calcul ].

Mais le man de bash dit:

Arithmetic Expansion
Arithmetic expansion allows the evaluation of an arithmetic expression
and the substitution of the result. The format for arithmetic expan-
sion is:

$((expression))

The old format $[expression] is deprecated and will be removed in
upcoming versions of bash.

Je suppose donc que cette seconde forme n'est pas POSIX (à vérifier).


Oui, $[...] vient de bash avant que POSIX n'introduise $((...)).
Au moins $[...] ne conflictait pas avec $(...)...

Note: zsh sait faire du calcul en flottant, mais c'est évidemment une
extension.


Ainsi que ksh93 (de facon differente).

Tous les shells savent faire du calcul flottant, il suffit
d'appeler les commandes qui font du calcul flottant (bc, awk par
exemple). N'oublions pas qu'un shell est un interpreteur de
commande avant tout.

--
Stéphane


1 2 3