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
profile
o .profile
. 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.
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 chgmod +x <scriptfile>
. Per
eseguirlo si scrive il suo nome.
Attenzione pero'. L'editor di sistema si chiama vi
, 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
joe
o emacs
per X.) Basti dire che:
vi
senza salvare, premete ESC e poi :q!Scrivere script sotto bash
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:
#!/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."
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...).
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 gcc
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 hello.c
si fa
cosi':
$ gcc hello.c
che produce di default un eseguibile chiamato a.out
. Per dargli un nome
diverso:
$ gcc -o ciao hello.c
Per linkare una libreria al programma, si aggiunge lo switch -l<libname>. Per esempio, per linkare la libreria matematica:
$ gcc -o mathprog mathprog.c -lm
(Lo switch -l<libname>
fa linkare a gcc
la libreria
/usr/lib/lib<libname>.a
; quindi -lm
linka
/usr/lib/libm.a
).
Finora, tutto bene. Ma se il vostro programma e' composto da molti file
sorgenti, vi servira' l'utility make
. Supponiamo che avete scritto un
parser per espressioni: il sorgente si chiama parser.c
e #include
due file header, parser.h
e xy.h
. Volete usare le routine di
parser.c
in un programma, diciamo calc.c
, che a sua volta
#include parser.h
. Che casino! Cosa bisogna fare per compilare
calc.c
?
Dovrete scrivere un cosiddetto makefile
, che insegna al compilatore
quali sono le dipendenze tra sorgenti e files oggetto. Nel nostro caso:
# 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.
Salvate questo file come makefile
e scrivete make
per compilare il programma; in alternativa, salvatelo come calc.mak
e
scrivete make -f calc.mak
. Ovviamente, LMP. Potete ottenere aiuto
sulle funzioni del C, che sono illustrate da pagine man, sezione 3; per
esempio,
$ man 3 printf
Ci sono tantissime librerie disponibili; tra le prime che vorrete usare ci
sono ncurses
, per gestire effetti in modo testo, e svgalib
, per
fare grafica. Se vi sentite abbastanza coraggiosi da affrontare la
programmazione sotto X, procuratevi
XForms
(
bloch.phys.uwm.edu/pub/xforms
) e/o una delle tante librerie che
rendono facile la programmazione sotto X. Date un'occhiata a
http://www.xnet.com/~blatura/linapp6.html
.
Molti editor possono fungere da IDE; emacs
e jed
, ad
esempio, hanno l'evidenziazione della sintassi, l'indent automatico e altre
cose. Oppure, prendete il programma rhide
da
sunsite.unc.edu:/pub/Linux/devel/debuggers/
. E' un clone della
IDE Borland, e probabilmente vi piacera'.