Page suivante Page précédente Table des matières

10. Un peu de programmation

10.1 Les shell-scripts : des fichiers .BAT dopés aux anabolisants

Si vous utilisiez des fichiers .BAT pour créer des raccourcis pour de longues lignes de commandes (moi-même j'en ai fait pas mal), vous pouvez atteindre ce but en insérant des lignes d'alias appropriés (cf. l'exemple ci-dessus) dans le profile ou le .bash_profile. Mais si vos .BAT étaient plus compliqués, alors vous adorerez le langage de script que vous offre le shell : il est aussi puissant que ce bon vieux QBasic, si ce n'est plus. Il possède des variables, des structures comme while, for, case, if... then... else et des tas d'autres fonctionnalités : il peut être une bonne alternative à un «vrai» langage de programmation.

Pour écrire un script -- l'équivalent d'un fichier .BAT sous DOS -- tout ce que vous avez à faire c'est d'écrire un fichier ASCII contenant les instructions, de le sauver, et de le rendre exécutable à l'aide de la commande chmod +x <fichierscript>. Pour l'exécuter, tapez son nom.

Un mot d'avertissement. L'éditeur du système s'appelle vi, et, d'après mon expérience, la plupart des nouveaux utilisateurs le trouvent très ardu. Je ne m'étendrai pas sur son utilisation, veuillez consulter le livre de Matt Welsh ou faire une recherche sur le Net. Je me contenterai de dire que :

Un bon éditeur pour débutants est joe : en le lançant avec la commande jstar, vous obtiendrez les mêmes raccourcis-clavier que ceux de l'éditeur de DOSWin. jed en mode WordStar ou IDE est même mieux. Veuillez consulter la section Où trouver les applications pour savoir où obtenir ces éditeurs.

L'écriture de scripts sous bash est un sujet tellement vaste qu'il nécessite un livre en lui-même, et je ne creuserai pas le sujet plus avant. Je me contenterai de vous donner un exemple de shell-script duquel vous pourrez extraire quelques règles de base :


#!/bin/sh
# exemple.sh
# Je suis un commentaire.
# Ne changez pas la premiere ligne, elle doit se trouver a cet endroit.
echo "Ce systeme est : `uname -a`" # utilise la sortie de la commande
echo "Mon nom est $0" # variables predefinies
echo "Vous m'avez transmis les $# parametres suivants : "$*
echo "Le premier parametre est : "$1
echo -n "Quel est votre nom ? " ; read votre_nom
echo notez la difference : "salut $votre_nom" # citation avec "
echo notez la difference : 'salut $votre_nom' # citation avec '
REPS=0 ; FICS=0
for fic in `ls .` ; do
  if [ -d ${fic} ] ; then # si fic est un repertoire
    REPS=`expr $REPS + 1`  # REPS = REPS + 1
  elif [ -f ${fic} ] ; then
    FICS=`expr $FICS + 1`
  fi
  case ${fic} in
    *.gif|*jpg) echo "${fic}: image" ;;
    *.txt|*.tex) echo "${fic}: fichier texte" ;;
    *.c|*.f|*.for) echo "${fic}: fichier source" ;;
    *) echo "${fic}: fichier generique" ;;
  esac
done
echo "il y a ${REPS} repertoires et ${FICS} fichiers"
ls | grep "ZxY--!!!WKW"
if [ $? != 0 ] ; then # code de retour de la derniere commande
  echo "ZxY--!!!WKW introuvable"
fi
echo "ca suffit... tapez 'man bash' pour en savoir plus."

10.2 «E-C-iez» par vous-même

Sous UNIX, le langage du système est le C, que vous l'aimiez ou non. Des douzaines d'autres langages (Java, FORTRAN, Pascal, Lisp, Basic, Perl, awk...) sont également disponibles.

En partant du principe que vous connaissez le C, voici quelques lignes directrices pour ceux d'entre vous qui ont été trop gâtés par le Turbo C++ ou l'un de ses cousins sous DOS. Le compilateur C de Linux s'appelle gcc et n'est pourvu d'aucun des gadgets qui accompagnent en général ses équivalents DOS : pas de IDE (Integrated Development Environment ou environnement de développement intégré), ni d'aide en ligne ou de débogueur intégré etc. Il s'agit juste d'un compilateur en ligne de commande brut de décoffrage, très puissant et efficace. Pour compiler votre hello.c de base, vous ferez :

$ gcc hello.c

ce qui créera un fichier exécutable appelé a.out. Pour donner un nom différent à l'exécutable, faites :

$ gcc -o hola hello.c

Pour intégrer une bibliothèque lors de l'édition de liens, ajoutez l'option -l<nomdebibli>. Par exemple, pour intégrer la bibliothèque mathématique :

$ gcc -o progmath progmath.c -lm

(L'option -l<nomdebibli> oblige gcc à intégrer la bibliothèque /usr/lib/lib<nomdebibli>.so; ainsi, -lm intègre /usr/lib/libm.so).

Jusque-là, tout va bien. Mais lorsque votre programme se compose de plusieurs fichiers source, vous aurez besoin de l'utilitaire make. Supposons que vous ayez écrit un analyseur d'expresssions : son fichier source s'appelle parser.c et il inclut (par #include) deux fichiers d'en-tête, parser.h et xy.h. Ensuite, vous souhaitez utiliser les routines de parser.c dans un programme, disons calc.c, qui à son tour inclut parser.h. Quel bazar ! Que faut-il faire pour compiler calc.c ?

Vous devrez écrire un Makefile, c'est ainsi qu'on l'appelle, qui apprenne au compilateur quelles sont les dépendances entre fichiers source et fichiers objet. Dans notre exemple :


# Voici Makefile, utilise pour compiler calc.c
# Appuyez sur <TAB> aux endroits indiques !

calc: calc.o parser.o
<TAB>gcc -o calc calc.o parser.o -lm
# calc depend de deux fichiers objet : calc.o et parser.o

calc.o: calc.c parser.h
<TAB>gcc -c calc.c
# calc.o depend de deux fichiers source

parser.o:  parser.c parser.h xy.h
<TAB>gcc -c parser.c
# parser.o depend de trois fichiers source

# fin du Makefile.

Enregistrez ce fichier sous le nom Makefile et faites make pour compiler votre programme ; une alternative est de l'enregistrer sous calc.mak et de taper make -f calc.mak, et, bien sûr, LPM. Vous pouvez accéder à quelques aides sur les fonctions C, qui se trouvent dans les pages du man, à la section 3, par exemple,

$ man 3 printf

Pour déboguer vos programmes, utilisez gdb. Faites info gdb pour apprendre à vous en servir.

De nombreuses bibliothèques sont disponibles ; les premières d'entre elles qui vous seront utiles sont ncurses (effets en mode texte), et svgalib (graphismes en mode console). Si vous vous sentez assez enhardi pour aborder la programmation X11 (ce n'est pas si difficile que cela), il existe des bibliothèques qui transforment l'écriture de programmes X11 en une promenade de santé. Regardez donc du côté de http://www.xnet.com/ blatura/linapp6.html en n'oubliant pas que Gtk devient un standard Linux.

Beaucoup d'éditeurs peuvent faire office d'IDE ; emacs et jed, par exemple, sont capables de mettre en évidence la syntaxe, faire de l'indentation automatique etc. Autrement, rapatriez le paquetage rhide à partir de ftp://sunsite.unc.edu:/pub/Linux/devel/debuggers/. C'est un clone de l'IDE de Borland, et vous devriez l'apprécier.


Page suivante Page précédente Table des matières