# Ecrire des scripts

**URL:** <https://www.debian-fr.org/t/ecrire-des-scripts/17023>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 6:38 UTC](https://www.debian-fr.org/t/ecrire-des-scripts/17023 "2016-02-20T18:38:42Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![jreeman](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/j/e47774/32.png) [@jreeman](https://www.debian-fr.org/u/jreeman)\
**Post date:** [Février 20, 2016, 6:38 UTC](https://www.debian-fr.org/t/ecrire-des-scripts/17023/1 "2016-02-20T18:38:42Z")

</div>

Bonjour,

j’aimerais écrire des scripts fonctionnant sur les mêmes principes que les commandes standard GNU Linux : ls, rm, cp etc.

Quels outils et quel langage de script peut-on utiliser pour cela ?

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 6:38 UTC](https://www.debian-fr.org/t/ecrire-des-scripts/17023/2 "2016-02-20T18:38:47Z")

</div>

bash.  
et voila les scripts:

`#!/bin/bash
ls $*``#!/bin/bash
rm $*``#!/bin/bash
cp $*``#!/bin/bash
etc $*` ![:smt005](https://www.debian-fr.org/uploads/default/original/1X/cdd45e7dd754015ac5291329b843a2851a0d4fe8.gif)

La pain qu’on prie.  
[dailymotion.com/video/xtddv\_ … ompris\_fun](http://www.dailymotion.com/video/xtddv_lapin-compris_fun)  
ice cream de tous les dieux…

---

<div class="post-metadata">

**Author:** ![jreeman](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/j/e47774/32.png) [@jreeman](https://www.debian-fr.org/u/jreeman)\
**Post date:** [Février 20, 2016, 6:38 UTC](https://www.debian-fr.org/t/ecrire-des-scripts/17023/3 "2016-02-20T18:38:48Z")

</div>

je pensais à getopts mais c’est bon c’est pas grave.

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 6:38 UTC](https://www.debian-fr.org/t/ecrire-des-scripts/17023/4 "2016-02-20T18:38:48Z")

</div>

Plus sérieusement, avec perl, tu as un paquet d’APIs transposant les outils bash (c’est d’ailleurs un élément de base de perl, cette similarité linguistique avec awk, sed, etc… et le shell).

---

<div class="post-metadata">

**Author:** ![jreeman](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/j/e47774/32.png) [@jreeman](https://www.debian-fr.org/u/jreeman)\
**Post date:** [Février 20, 2016, 6:39 UTC](https://www.debian-fr.org/t/ecrire-des-scripts/17023/5 "2016-02-20T18:39:02Z")

</div>

Ce que je veux faire, c’est écrire des commandes sur lesquels il est possible de faire un man et info, de mettre des options sous forme courte ou longue.

Mais à mon avis, pour me fondre dans le même fonctionnement que les commandes standard, je dois implémenter mon script C.  
Si c’est le cas, y aurait-il une documentation ou un tutorial sur le sujet ?

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 6:39 UTC](https://www.debian-fr.org/t/ecrire-des-scripts/17023/6 "2016-02-20T18:39:04Z")

</div>

[cs.mcgill.ca/~abatko/compute … o/getopts/](http://www.cs.mcgill.ca/~abatko/computers/programming/perl/howto/getopts/)  
et pour le man et les infos, je ne suis pas super au point dessus, mais tu peux commenter ton code de manière à génèrer la doc derrière avec perlpod:  
[perldoc.perl.org/perlpod.html](http://perldoc.perl.org/perlpod.html)

---

<div class="post-metadata">

**Author:** ![Tycho\_Brahe](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/ec9cab/32.png) [@Tycho\_Brahe](https://www.debian-fr.org/u/Tycho_Brahe)\
**Post date:** [Février 20, 2016, 6:39 UTC](https://www.debian-fr.org/t/ecrire-des-scripts/17023/7 "2016-02-20T18:39:05Z")

</div>

[quote=“jreeman”]Ce que je veux faire, c’est écrire des commandes sur lesquels il est possible de faire un man et info, de mettre des options sous forme courte ou longue.

Mais à mon avis, pour me fondre dans le même fonctionnement que les commandes standard, je dois implémenter mon script C.  
Si c’est le cas, y aurait-il une documentation ou un tutorial sur le sujet ?[/quote]  
Ca se fait dans n’importe quel langage ça, les “commandes” sont :

- soit des builtins interne au shell que tu utilise (et ça on ne peux pas faire grand chose).
- soit des exécutables situées dans un des répertoires indiqué dans la variables d’environnement PATH (echo $PATH pour voir lesquels). Nota : ces répertoires sont, dans des conditions normales de température et de pression, la propriété de root.  
(je laisse de côté les alias)  
Bref, si j’ai bien compris, ce que tu cherche a faire c’est créer un exécutable qu’il te faudra déplacer dans /bin ou autre, chose que pour ma part je déconseille fortement a un débutant. Au besoin garde ton exécutable dans ton home (ou mieux, un sous répertoire spécial) et fait utilise un alias pour y accéder (voir ajouter ce rep a PATH m’enfin bon …).

En ce qui concerne le man, c’est un simple fichier texte qui a été gzip (cf man man puis man tar) et déplacé dans un répertoire spécial (en général /usr/share/man/ puis catégorie ou langue puis catégorie). A noter que ce rep est normalement également propriété de root et qu’il est possible d’indiquer a man de rechercher la doc dans un autre répertoire indiqué pour le rep local (etc, man man pour plus d’infos).

Bref, si j’avais un conseil a te donner, c’est d’abord de choisir un langage particulier et de beaucoup t’entraîner dessus sans nécessairement chercher a faire un man ou de le lancer directement en tapant son nom dans un shell, génère déjà un bon exécutable qui fonctionne, on verra après pour les bonus 🙂

PS : le C est un langage compilé, le terme “script” fait référence, du moins pour moi, a un langage interprété, je ne pense donc pas que l’on puisse vraiment parler de “script” C.

---

<div class="post-metadata">

**Author:** ![jreeman](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/j/e47774/32.png) [@jreeman](https://www.debian-fr.org/u/jreeman)\
**Post date:** [Février 20, 2016, 6:39 UTC](https://www.debian-fr.org/t/ecrire-des-scripts/17023/8 "2016-02-20T18:39:07Z")

</div>

Par rapport au langage C, en réalité, je ne voulais pas parler de scripts mais de commandes (écrites ou pas en C).

C’est difficile de se comprendre mais c’est ma faute, je n’emploie pas les termes comme il faut car j’avais pas les idées très claires mais je commence à mieux voir ce que je dois réaliser.

En fait, ce que j’ai à faire, à vrai dire, se fait très facilement en bash par exemple ou en perl. Mais ce que je voudrais c’est le rendre un peu plus professionnel. Plus professionnel, je veux dire par là, par exemple, passer les options avec des “moins”, par exemple “-d quelquechose”, ca voudrait dire aussi qu’on pourrait faire “-v” ou “–verbose” par exemple, un petit man aussi serait sympa, mais c’est pas fondamental, si j’ai la même chose à peu près en faisant \<ma\_commande\> -h, ca irait largement par exemple.

Je trouve aussi qu’une commande qui est en fait un script sh, me laisse un peu sur ma faim, j’raurais bien aimer avoir à la fin un executable binaire, mais il faut dire que c’est le plus rapide, car de cette manière je peux profiter des commandes déjà existantes.

Après pour la sécurité ca va pas aller dans /bin ca c’est sûr, plutôt dans /usr/local/, pour les droits d’exécution, je pense qu’il ne faudrait pas exécuter le script en root, mais par exemple créer un utilisateur ou un groupe qui aurait les droits d’exécutions sur le fichier.

L’idéal serait de faire un .deb, peut-être pour automatiser tout ca lors de l’installation (là je m’avance peut-être), mais je ne m’y connais pas assez et ce n’est pas très util dans mon contexte, un read-me.txt avec les étapes de la procédure d’installation pourrait suffir.

Voilà j’espère avoir été un peu plus clair, et j’espère ne pas être sur des mauvaises pistes.

---

<div class="post-metadata">

**Author:** ![Tycho\_Brahe](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/ec9cab/32.png) [@Tycho\_Brahe](https://www.debian-fr.org/u/Tycho_Brahe)\
**Post date:** [Février 20, 2016, 6:39 UTC](https://www.debian-fr.org/t/ecrire-des-scripts/17023/9 "2016-02-20T18:39:10Z")

</div>

> [@](#):
>
> Par rapport au langage C, en réalité, je ne voulais pas parler de scripts mais de commandes (écrites ou pas en C).

Donc d’un simple binaire exécutable 🙂

> [@](#):
>
> En fait, ce que j’ai à faire, à vrai dire, se fait très facilement en bash par exemple ou en perl. Mais ce que je voudrais c’est le rendre un peu plus professionnel. Plus professionnel, je veux dire par là, par exemple, passer les options avec des “moins”, par exemple “-d quelquechose”, ca voudrait dire aussi qu’on pourrait faire “-v” ou “–verbose” par exemple, un petit man aussi serait sympa, mais c’est pas fondamental, si j’ai la même chose à peu près en faisant \<ma\_commande\> -h, ca irait largement par exemple.

Tu peux très bien récupérer les paramètres que l’on ta passe en bash et perl 😉 Puis un petit coup de chmod +x et hop ça devient exécutable.  
Pour le bash :  
$# est le nombre de paramètres passés  
$@ désigne l’ensemble des paramètres  
$0 désigne le premier paramètre (le nom de l’exécutable avec son chemin), $1 désigne le second, etc

En C main peux prendre deux arguments utiles : le premier est un entier et contiendra le nombre d’arguments passés, le second est un tableau de chaînes de caractère et contient chaque paramètre (dans une chaîne de caractère bien entendu).

[code]#include \<string.h\>  
#include \<unistd.h\>

int disp\_str(char \*str)  
{  
return (write(1, str, strlen(str)));  
}

int main(int argc, char \*\*argv)  
{  
int i;

for (i=0; i\<argc; i++)  
{  
disp\_str(argv[i]);  
disp\_str("\n");  
}  
return (0);  
}[/code]  
Tu remarquera que je n’utilise pas printf(), c’est a cause de ses effets de bords qui déroutent bien des débutants

> [@](#):
>
> L’idéal serait de faire un .deb, peut-être pour automatiser tout ca lors de l’installation (là je m’avance peut-être), mais je ne m’y connais pas assez et ce n’est pas très util dans mon contexte, un read-me.txt avec les étapes de la procédure d’installation pourrait suffir.

Commence donc par faire un makefile 🙂

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 6:39 UTC](https://www.debian-fr.org/t/ecrire-des-scripts/17023/10 "2016-02-20T18:39:11Z")

</div>

[quote=“Tycho Brahe”][quote=“jreeman”]Par rapport au langage C, en réalité, je ne voulais pas parler de scripts mais de commandes (écrites ou pas en C).[/quote] Donc d’un simple binaire exécutable 🙂  
(…)[/quote] Non. Un simple executable. Pas forcément binaire, pourquoi focaliser sur le C ? Il y a aussi tout ce qu’il faut en perl ou en python.  
Il faut choisir le langage en fonction des contraintes ou options possibles, puis regarder comment on analyse la ligne de commande dans ce langage, mais tous auront un équivalent de getopts.

---

<div class="post-metadata">

**Author:** ![Tycho\_Brahe](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/ec9cab/32.png) [@Tycho\_Brahe](https://www.debian-fr.org/u/Tycho_Brahe)\
**Post date:** [Février 20, 2016, 6:39 UTC](https://www.debian-fr.org/t/ecrire-des-scripts/17023/11 "2016-02-20T18:39:11Z")

</div>

> [@](#):
>
> Non. Un simple executable. Pas forcément binaire, pourquoi focaliser sur le C ?

Parce que ceci provenais de ma remarque sur l’utilisation du terme “script C” 😉

---

<div class="post-metadata">

**Author:** ![jreeman](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/j/e47774/32.png) [@jreeman](https://www.debian-fr.org/u/jreeman)\
**Post date:** [Février 20, 2016, 6:39 UTC](https://www.debian-fr.org/t/ecrire-des-scripts/17023/12 "2016-02-20T18:39:11Z")

</div>

Le truc c’est que j’ai compris qu’il y a deux parties dans ce que je dois faire finalement :

[ul][li]l’exécutable en question, qui est un “vrai” livrable entendu dans le sens où il y a une vraie valeur ajoutée et un rôle bien défini[/li]  
[li]et le script global exploitant mon executable mais aussi d’autres commandes standard existantes comme “rm”, “scp”.[/li][/ul]

Finalement, ce découpage me semble cohérant, le principal étant d’avoir tous les outils de manière à permettre n’importe qui de faire ce qu’il veut rapidement en langage de script ou en tapant quelques commandes.

Merci bien à vous en tout cas.

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 6:39 UTC](https://www.debian-fr.org/t/ecrire-des-scripts/17023/13 "2016-02-20T18:39:30Z")

</div>

Si tu fais du modulaire, tu peux aussi faire ce qui est atomique en petites commandes C, et le wrapper avec GUI, manuel, et tout ça en script, effectivement.
