Questa è una vecchia versione del documento!
Indice
Esercitazione 4
Discussione su Makefile
Vogliamo scrivere un Makefile in grado di compilare tutti i sorgenti .c
che si trovano nella directory dove si trova il Makefile personalizzando la compilazione dei file oggetto:
CC = gcc -std=c99 CFLAGS = -g -Wall OPTFLAGS= -O3 INCLUDES= -I. LDFLAGS = -L. LIBS = SOURCES=$(wildcard *.c) # considera tutti i file .c nella directory BINS=$(SOURCES:.c=) # rimuove il suffisso .c dalla lista SOURCES .PHONY: all clean cleanall # personalizziamo la generazione dell'eseguibile da un .c %: %.c $(CC) $(CFLAGS) $(INCLUDES) $(OPTFLAGS) -o $@ $< $(LDFLAGS) $(LIBS) # prima regola contenente il target all: $(BINS) clean: \rm -f *~ cleanall: clean \rm -f $(BINS)
Esercizio 1
Estrarre dal file /etc/passwd
la lista di tutti gli utenti della macchina utilizzando il comando cut
(vedere slide su introduzione bash e manuale di cut
). Ordinare alfabeticamente la lista ottenuta utilizzando il comando sort
(vedere man 1 sort).
NB: fare attenzione al seguente messaggio di warning contenuto nel manuale del comando sort:
“The locale specified by the environment affects sort order. Set LC_ALL=C to get the traditional sort order that uses native byte values.”
Esercizio 2
Scrivere uno script Bash che genera N numeri casuali compresi tra 0 ed M. N ed M sono due argomenti dello script (M è minore di 32767). Per generare numeri casuali, utilizzare la funzione $RANDOM
:
$RANDOM
è una funzione interna di Bash che restituisce un intero pseudocasuale nell'intervallo 0 - 32767.
Esercizio 3
Utilizzando il comando find
stampare sullo standard output la lista di tutti i file contenuti nella directory corrente che hanno estensione “.sh” e che sono stati modificati negli ultimi 30 minuti (Usare l'opzione -mmin di find – vedi man 1 find
).
Esercizio 4
Scrivere uno script bash che prende “k>=2” nomi di file di ingresso e appende i primi “k-1” files nel file passato come ultimo argomento (k-esimo).
Esercizio 5
Scrivere uno script bash che prende in input un nome di file testuale e stampa sullo standard output il numero di parole contenute nel file (Suggerimento, usare l'opzione -a del builtin read
).