Sophie

Sophie

distrib > Mandriva > 9.1 > i586 > by-pkgid > f1098342ec4a2b28475e34123ce17201 > files > 167

howto-html-it-9.1-0.5mdk.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE> From DOS/Windows to Linux HOWTO : Un po' di programmazione</TITLE>
<LINK HREF="DOS-to-Linux-HOWTO-8.html" REL=next>
<LINK HREF="DOS-to-Linux-HOWTO-6.html" REL=previous>
<LINK HREF="DOS-to-Linux-HOWTO.html#toc7" REL=contents>
</HEAD>
<BODY>
<A HREF="DOS-to-Linux-HOWTO-8.html">Avanti</A>
<A HREF="DOS-to-Linux-HOWTO-6.html">Indietro</A>
<A HREF="DOS-to-Linux-HOWTO.html#toc7">Indice</A>
<HR>
<H2><A NAME="s7">7. Un po' di programmazione</A></H2>

<P>
<P>
<H2><A NAME="Shell Scripts"></A> <A NAME="ss7.1">7.1 Shell script: super file .BAT  </A>
</H2>

<P>
<P>Se usavate i file .BAT per creare diminutivi di lunghe linee di comando (io
lo facevo spesso), questo si puo' ottenere inserendo degli alias in
<CODE>profile</CODE> o <CODE>.profile</CODE>. Ma se i vostri .BAT erano piu' complessi, vi
piacera' il linguaggio di scripting della shell: e' potente come il QBasic, se
non di piu'. Ha variabili, strutture come while,
for, case, if... then... else, e molte altre caratteristiche: puo' essere una
buona alternativa ad un ``vero'' linguaggio di programmazione.
<P>Per scrivere un file script---l'equivalente di un .BAT file sotto DOS---non
si fa altro che scrivere un file ASCII contenente le istruzioni, lo si salva
e poi lo si rende eseguibile col comando <CODE>chgmod +x &lt;scriptfile></CODE>. Per
eseguirlo si scrive il suo nome.
<P>Attenzione pero'. L'editor di sistema si chiama <CODE>vi</CODE>, e ho visto che molti
nuovi utenti lo trovano molto difficile da usare. Non spieghero' come usarlo
perch&eacute; non mi piace e non lo uso; consultate ``Linux installation...'' di
Matt Welsh, a pag. 109. (Fareste meglio a procurarvi un altro editor come
<CODE>joe</CODE> o <CODE>emacs</CODE> per X.) Basti dire che:
<P>
<UL>
<LI> per inserire del testo, premete 'i' e poi il testo;</LI>
<LI> per uscire da <CODE>vi</CODE> senza salvare, premete ESC e poi :q!</LI>
<LI> per salvare e uscire, premete ESC e poi :wq</LI>
</UL>
<P>Scrivere script sotto <CODE>bash</CODE> e' un argomento cosi' vasto che richiederebbe
un libro per conto suo, e non daro' spiegazioni ma solo un esempio piuttosto
completo di shell script, dal quale potrete intuire le regole di base:
<P>
<HR>
<PRE>

#!/bin/sh
# esempio.sh
# Io sono un commento
# non cambiate la prima linea, deve restare cosi' com'e'
echo "Questa macchina e': `uname -a`" # usa l'output del comando
echo "Il mio nome e' $0" # variabile interna
echo "Mi hai dato i seguenti $# argomenti: " $*
echo "Il primo argomento e': " $1
echo -n "Come ti chiami? " ; read nome
echo guarda la differenza: "ciao $nome" # meccanismo di quoting con "
echo guarda la differenza: 'ciao $nome' # meccanismo di quoting con '
DIRS=0 ; FILES=0
for file in `ls .` ; do
  if [ -d ${file} ] ; then # se file e' una directory
    DIRS=`expr $DIRS + 1`  # DIRS = DIRS + 1
  elif [ -f ${file} ] ; then
    FILES=`expr $FILES + 1`
  fi
  case ${file} in
    *.gif|*jpg) echo "${file}: file grafico" ;;
    *.txt|*.tex) echo "${file}: file di testo" ;;
    *.c|*.f|*.for) echo "${file}: file sorgente" ;;
    *) echo "${file}: file generico" ;;
  esac
done
echo "ci sono ${DIRS} directories e ${FILES} files"
ls | grep "ZxY--!!!WKW"
if [ $? != 0 ] ; then # exit code dell'ultimo comando
  echo "non ho trovato ZxY--!!!WKW"
fi
echo "basta cosi'... scrivi 'man bash' se vuoi altre informazioni."
</PRE>
<HR>
<P>
<P>
<H2><A NAME="ss7.2">7.2 Programmare in C</A>
</H2>

<P>
<P>Sotto Unix, il linguaggio di programmazione per eccellenza e' il C, vi
piaccia o no. Ci sono anche molti altri linguaggi a disposizione (FORTRAN,
Pascal, Lisp, Basic, Perl, awk...).
<P>Dato per scontato che conosciate il C, ecco qui un paio di linee guida per
quelli di voi che sono stati viziati dal Turbo C++ o analogo compilatore. Il
compilatore C di Linux si chiama <CODE>gcc</CODE> e non ha tutte quelle cose che di
solito accompagnano un compilatore per DOS: niente IDE, aiuto in linea,
debugger integrato e cosi' via. &Egrave; solo un compilatore a linea di comando,
molto potente ed efficiente. Per compilare il classico <CODE>hello.c</CODE> si fa
cosi':
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ gcc hello.c
</PRE>
</CODE></BLOCKQUOTE>
<P>che produce di default un eseguibile chiamato <CODE>a.out</CODE>. Per dargli un nome
diverso:
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ gcc -o ciao hello.c
</PRE>
</CODE></BLOCKQUOTE>
<P>Per linkare una libreria al programma, si aggiunge lo switch
-l&lt;libname&gt;. Per esempio, per linkare la libreria matematica:
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ gcc -o mathprog mathprog.c -lm
</PRE>
</CODE></BLOCKQUOTE>
<P>(Lo switch <CODE>-l&lt;libname&gt;</CODE> fa linkare a <CODE>gcc</CODE> la libreria
<CODE>/usr/lib/lib&lt;libname&gt;.a</CODE>; quindi <CODE>-lm</CODE> linka
<CODE>/usr/lib/libm.a</CODE>).
<P>Finora, tutto bene. Ma se il vostro programma e' composto da molti file
sorgenti, vi servira' l'utility <CODE>make</CODE>. Supponiamo che avete scritto un
parser per espressioni: il sorgente si chiama <CODE>parser.c</CODE> e #include
due file header, <CODE>parser.h</CODE> e <CODE>xy.h</CODE>. Volete usare le routine di
<CODE>parser.c</CODE> in un programma, diciamo <CODE>calc.c</CODE>, che a sua volta
#include <CODE>parser.h</CODE>. Che casino! Cosa bisogna fare per compilare
<CODE>calc.c</CODE>?
<P>Dovrete scrivere un cosiddetto <CODE>makefile</CODE>, che insegna al compilatore
quali sono le dipendenze tra sorgenti e files oggetto. Nel nostro caso:
<P>
<HR>
<PRE>

# Questo e' makefile, usato per compilare calc.c
# Premere il tasto &lt;TAB> dove indicato

calc: calc.o parser.o
&lt;TAB>gcc -o calc calc.o parser.o -lm
# calc dipende da due files oggetto: calc.o e parser.o

calc.o: calc.c parser.h
&lt;TAB>gcc -c calc.c
# calc.o dipende da due files sorgenti

parser.o:  parser.c parser.h xy.h
&lt;TAB>gcc -c parser.c
# parser.o dipende da tre files sorgenti

# end of makefile.
</PRE>
<HR>
<P>Salvate questo file come <CODE>makefile</CODE> e scrivete <CODE>make</CODE>
per compilare il programma; in alternativa, salvatelo come <CODE>calc.mak</CODE> e 
scrivete <CODE>make -f calc.mak</CODE>. Ovviamente, LMP. Potete ottenere aiuto
sulle funzioni del C, che sono illustrate da pagine man, sezione 3; per
esempio,
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ man 3 printf
</PRE>
</CODE></BLOCKQUOTE>
<P>Ci sono tantissime librerie disponibili; tra le prime che vorrete usare ci
sono <CODE>ncurses</CODE>, per gestire effetti in modo testo, e <CODE>svgalib</CODE>, per
fare grafica. Se vi sentite abbastanza coraggiosi da affrontare la
programmazione sotto X, procuratevi 
<CODE>XForms</CODE> (<CODE> 
<A HREF="ftp://bloch.phys.uwm.edu/pub/xforms">bloch.phys.uwm.edu/pub/xforms</A></CODE>) e/o una delle tante librerie che
rendono facile la programmazione sotto X. Date un'occhiata a <CODE>
<A HREF="http://www.xnet.com/~blatura/linapp6.html">http://www.xnet.com/~blatura/linapp6.html</A> </CODE>. 
<P>Molti editor possono fungere da IDE; <CODE>emacs</CODE> e <CODE>jed</CODE>, ad
esempio, hanno l'evidenziazione della sintassi, l'indent automatico e altre
cose. Oppure, prendete il programma <CODE>rhide</CODE> da <CODE>
<A HREF="ftp://sunsite.unc.edu:/pub/Linux/devel/debuggers/">sunsite.unc.edu:/pub/Linux/devel/debuggers/</A></CODE>. E' un clone della
IDE Borland, e probabilmente vi piacera'.
<P>
<P>
<HR>
<A HREF="DOS-to-Linux-HOWTO-8.html">Avanti</A>
<A HREF="DOS-to-Linux-HOWTO-6.html">Indietro</A>
<A HREF="DOS-to-Linux-HOWTO.html#toc7">Indice</A>
</BODY>
</HTML>