7. Un peu de programmation

Contenu de cette section

7.1 Les shell-scripts : des fichiers .BAT dopés aux stéroïdes

Si vous utilisiez les fichiers .BAT pour créer des raccourcis pour de longues lignes de commande (c'est ce que je faisais beaucoup moi-même), ce but peut être atteint en insérant des lignes alias appropriées (cf. les exemples ci-dessus) dans profile ou .profile. Mais si vos .BAT étaient plus compliqués, alors vous aimerez le langage de commandes que vous offre le shell : il est aussi puissant que le QBasic, sinon plus. Il a des variables, des structures comme while, for, case, if... then... else, et un tas d'autres caractéristiques : il peut constituer 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 est d'écrire un fichier ASCII standard contenant les instructions, de le sauver, et de le rendre exécutable avec la commande chmod +x <fichierscript>. Pour l'exécuter, tapez son nom.

Quelques mots de mise en garde. L'éditeur du système est appelé vi, et, d'après mon expérience, la plupart des nouveaux utilisateurs le trouve très difficile à utiliser. Je ne vais pas expliquer comment l'utiliser, parce que je ne l'aime pas et que je ne l'utilise pas, alors voilà. Lisez le ``Linux installation...'' de Math Welsh p. 109 (vous feriez mieux de mettre la main sur un autre éditeur comme joe ou emacs pour X.) Je me contenterai de dire que :

L'écriture de scripts sous bash est un sujet tellement vaste qu'il nécessiterait un livre à lui seul, et je ne creuserai pas le sujet plus en avant. Je vous donnerai juste un exemple de shell-script, duquel vous pouvez extraire quelques règles de base :



#!/bin/sh
# echantillon.sh
# je suis un commentaire
# ne changez pas la premiere ligne, elle doit se trouver la
echo "Ce systeme est : `uname -a`" # utilise la sortie de la commande 'uname'
echo "Je m appelle $0" # variables predefinies
echo "Vous m avez donne les  $# parametres suivants : "$*
echo "Le premier parametre est : "$1
echo -n "Comment vous appelez-vous? " ; read votre_nom
echo notez la difference : "salut $votre_nom" # delimitation par "
echo notez la difference : 'salut $votre_nom' # delimitation par '
DIRS=0 ; FILES=0
for file in `ls .` ; do
  if [ -d ${file} ] ; then # si le fichier est un repertoire
    DIRS=`expr $DIRS + 1`  # DIRS = DIRS + 1
  elif [ -f ${file} ] ; then
    FILES=`expr $FILES + 1`
  fi
  case ${file} in
    *.gif|*jpg) echo "${file} : fichier graphique" ;;
    *.txt|*.tex) echo "${file} : fichier texte" ;;
    *.c|*.f|*.for) echo "${file} : fichier source" ;;
    *) echo "${file} : fichier generique" ;;
  esac
done
echo "il y a  ${DIRS} repertoires et ${FILES} fichiers"
ls | grep "ZxY--!!!WKW"
if [ $? != 0 ] ; then # code de sortie de la derniere commande
  echo "ZxY--!!!WKW not found"
fi
echo "Ca suffit... tapez 'man bash' si vous voulez plus d infos."

7.2 E-C-iez par vous-même

Sous UNIX, le langage système est le C, que vous l'aimiez ou le détestiez. Des tonnes d'autres langages (FORTRAN, Pascal, Lisp, Basic, Perl, awk...) sont également disponibles. NdT. : bien sûr, une version de l'environnement Java est également disponible pour Linux.

En partant du principe que vous connaissez le C, voici quelques indications pour ceux d'entre vous qui ont été trop gâtés par le Turbo C++ ou l'un de ses frères du DOS. Le compilateur C de Linux est appelé gcc et n'a pas toutes les fioritures qui accompagnent généralement ses correspondants DOS : pas de IDE, d'aide en ligne, de debugger intégré etc... C'est juste un compilateur brut en mode ligne de commande, très puissant et efficace. Pour compiler votre hello.c standard, vous ferez :

$ gcc hello.c

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

$ gcc -o hola hello.c

Pour linker un programme avec une bibliothèque; ajoutez l'option -l<nomdebiblio>. Par exemple, pour linker avec la bibliothèque mathématique :

$ gcc -o mathprog mathprog.c -lm

(L'option -l<nomdebiblio> oblige gcc à linker la bibliothèque /usr/lib/lib<nomdebiblio>.a; donc, -lm renvoie à /usr/lib/libm.a.)

Jusque là, tout va bien. Mais lorsque votre programme est composé de plusieurs fichiers source, vous aurez besoin de faire appel à l'utilitaire make. Supposons que vous ayez écrit un analyseur d'expressions : son fichier source s'appelle parser.c et inclut ( #include ) deux fichiers d'en-têtes, parser.h et xy.h. Puis vous voulez utiliser les routines de parser.c dans un programme, disons, calc.c, qui inclut ( #include ) à son tour parser.h. Quel souk ! Comment devez vous faire pour compiler calc.c?

Vous aurez à écrire un fichier appelé makefile, qui apprend au compilateur les dépendances entre fichiers objet et fichiers source. Dans notre exemple :


# Voici le makefile, utilise pour compiler calc.c
# Pressez la touche <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.

Sauvez ce fichier sous le nom de makefile et tapez make pour compiler votre programme; sinon, sauvez le sous le nom calc.mak et tapez make -f calc.mak, et, bien sûr, LPM.

Vous pouvez invoquer un minimum d'aide à propos des fonctions C, qui sont traitées dans les pages man, section 3, par exemple,

$ man 3 printf

Il y a des tas de bibliothèques disponibles; parmi les premiers que vous voudrez utiliser il y a ncurses, qui s'occupe des effets du mode texte, et svgalib pour faire du graphique. Si vous vous sentez de taille à attaquer la programmation X, procurez-vous XForms ( bloch.phys.uwm.edu/pub/xforms ) et/ou l'une des nombreuses bibliothèques qui font de l'écriture de programmes utilisant X un jeu d'enfant. Jetez un oeil sur http://www.xnet.com/~blatura/linapp6.html .

De nombreux éditeurs peuvent fonctionner comme un IDE; emacs et jed par exemple, sont capables de surlignage syntaxique, d'indentation automatique etc... Autrement, récupérez le paquetage rhide à partir de sunsite.unc.edu:/pub/Linux/devel/debuggers/ . Il s'agit d'un clone du IDE de Borland, et il y a des chances que vous l'aimiez.


Chapitre suivant, Chapitre Précédent

Table des matières de ce chapitre, Table des matières générale

Début du document, Début de ce chapitre