<!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 <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é 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. È 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<libname>. 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<libname></CODE> fa linkare a <CODE>gcc</CODE> la libreria <CODE>/usr/lib/lib<libname>.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 <TAB> dove indicato calc: calc.o parser.o <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 <TAB>gcc -c calc.c # calc.o dipende da due files sorgenti parser.o: parser.c parser.h xy.h <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>