====== Esercitazione 4 ====== ====== Discussione su un 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 eseguibili: CC = gcc -std=c99 # quale compilatore usare per compilare il codice CFLAGS = -g -Wall # flags passati al compilatore per debugging e warning etc.. OPTFLAGS= -O3 # flags passati al compilatore per ottimizzazione del codice INCLUDES= -I. # path dove si trovano gli include (non di sistema) LDFLAGS = -L. # path dove so trovano le librerie LIBS = # vanno messe qui le librerie da linkare 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 utilizzando una Pattern Rule # Pattern Rules documentation: # https://www.gnu.org/software/make/manual/html_node/Pattern-Rules.html %: %.c $(CC) $(CFLAGS) $(INCLUDES) $(OPTFLAGS) -o $@ $< $(LDFLAGS) $(LIBS) # prima regola contenente il target all: $(BINS) clean: \rm -f *~ cleanall: clean \rm -f $(BINS) ====== Bash scripting ======= ===== 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 dati come argomenti un nome di directory una parola ed un numero ''N'', stampa la lista di tutti i nomi di file contenuti nella directory che sono stati modificati negli ultimi ''N'' minuti e che contengono la parola passata come secondo argomento. (Per cercare nella directory usare il comando ''find'', per trovare i file modificati meno di N minuti fa utilizzare l'opzione -mmin di find -- vedi ''man 1 find''). ===== Esercizio 3 ========== 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 4 ===== 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''. Per accedere al manuale: ''man bash'', quindi cercare -- si cerca dando il comando ''/'' -- "SHELL BUILTIN COMMANDS" quindi scorrere fino a trovare il builtin read).