Ecrire des scripts

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 ?

bash.
et voila les scripts:

#!/bin/bash ls $*#!/bin/bash rm $*#!/bin/bash cp $*#!/bin/bash etc $* :smt005

La pain qu’on prie.
dailymotion.com/video/xtddv_ … ompris_fun
ice cream de tous les dieux…

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

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).

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 ?

cs.mcgill.ca/~abatko/compute … o/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

[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 :slightly_smiling:

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.

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.

Donc d’un simple binaire exécutable :slightly_smiling:

Tu peux très bien récupérer les paramètres que l’on ta passe en bash et perl :wink: 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

Commence donc par faire un makefile :slightly_smiling:

[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 :slightly_smiling:
(…)[/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.

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

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.

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.