Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Esercizi Bash con soluzioni, Schemi e mappe concettuali di Sistemi Operativi

esercizi bash per il corso di sistemi operativi

Tipologia: Schemi e mappe concettuali

2025/2026

Caricato il 02/02/2026

sabrina-fuso-1
sabrina-fuso-1 🇮🇹

14 documenti

1 / 4

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
ESERCIZI DI BASH (MEDIO/AVANZATO) – CON
SOLUZIONI
10 esercizi tipici da esame + soluzioni commentate. Tutti gli script assumono Bash.
Suggerimento: prova PRIMA a svolgere l’esercizio, poi confronta la soluzione.
Esercizio 1 — Validazione input + conteggio righe (robusto)
Scrivi uno script count_lines.sh che accetta un percorso file come primo argomento e stampa il numero di
righe. Requisiti: (1) se manca l’argomento mostra uso e exit 2; (2) se il file non esiste o non è leggibile exit 1; (3)
funziona anche con nomi file con spazi; (4) stampa solo il numero (niente testo).
Soluzione
#!/bin/bash
set -euo pipefail
usage() { echo "Uso: $0 FILE" >&2; }
if [[ $# -ne 1 ]]; then
usage
exit 2
fi
file="$1"
if [[ ! -f "$file" || ! -r "$file" ]]; then
exit 1
fi
wc -l < "$file"
Esercizio 2 — Pipeline: top N parole (normalizzazione)
Dato un file di testo, stampa le 10 parole più frequenti in minuscolo, ignorando punteggiatura. Output:
"conteggio parola" ordinato per conteggio decrescente.
Soluzione
#!/bin/bash
set -euo pipefail
[[ $# -eq 1 ]] || { echo "Uso: $0 FILE" >&2; exit 2; }
f="$1"
[[ -r "$f" ]] || exit 1
tr -cs '[:alnum:]' '\n' < "$f" \
| tr '[:upper:]' '[:lower:]' \
| sort \
| uniq -c \
| sort -nr \
| head -n 10
Esercizio 3 — Ricerca: file modificati nelle ultime N ore
Scrivi recent.sh DIR N che elenca i file regolari in DIR modificati nelle ultime N ore (N intero positivo). Stampa
percorso completo, uno per riga. Gestisci input errati.
Soluzione
#!/bin/bash
set -euo pipefail
[[ $# -eq 2 ]] || { echo "Uso: $0 DIR ORE" >&2; exit 2; }
dir="$1"; hours="$2"
[[ -d "$dir" ]] || exit 1
[[ "$hours" =~ ^[1-9][0-9]*$ ]] || { echo "ORE deve essere intero positivo" >&2; exit 2; }
pf3
pf4

Anteprima parziale del testo

Scarica Esercizi Bash con soluzioni e più Schemi e mappe concettuali in PDF di Sistemi Operativi solo su Docsity!

ESERCIZI DI BASH (MEDIO/AVANZATO) – CON

SOLUZIONI

10 esercizi tipici da esame + soluzioni commentate. Tutti gli script assumono Bash.

Suggerimento: prova PRIMA a svolgere l’esercizio, poi confronta la soluzione.

Esercizio 1 — Validazione input + conteggio righe (robusto)

Scrivi uno script count_lines.sh che accetta un percorso file come primo argomento e stampa il numero di

righe. Requisiti: (1) se manca l’argomento mostra uso e exit 2; (2) se il file non esiste o non è leggibile exit 1; (3)

funziona anche con nomi file con spazi; (4) stampa solo il numero (niente testo).

Soluzione

#!/bin/bash set -euo pipefail

usage() { echo "Uso: $0 FILE" >&2; }

if [[ $# -ne 1 ]]; then usage exit 2 fi

file="$1" if [[! -f "$file" ||! -r "$file" ]]; then exit 1 fi

wc -l < "$file"

Esercizio 2 — Pipeline: top N parole (normalizzazione)

Dato un file di testo, stampa le 10 parole più frequenti in minuscolo, ignorando punteggiatura. Output:

"conteggio parola" ordinato per conteggio decrescente.

Soluzione

#!/bin/bash set -euo pipefail [[ $# -eq 1 ]] || { echo "Uso: $0 FILE" >&2; exit 2; } f="$1" [[ -r "$f" ]] || exit 1

tr -cs '[:alnum:]' '\n' < "$f"
| tr '[:upper:]' '[:lower:]'
| sort
| uniq -c
| sort -nr
| head -n 10

Esercizio 3 — Ricerca: file modificati nelle ultime N ore

Scrivi recent.sh DIR N che elenca i file regolari in DIR modificati nelle ultime N ore (N intero positivo). Stampa

percorso completo, uno per riga. Gestisci input errati.

Soluzione

#!/bin/bash set -euo pipefail

[[ $# -eq 2 ]] || { echo "Uso: $0 DIR ORE" >&2; exit 2; } dir="$1"; hours="$2"

[[ -d "$dir" ]] || exit 1 [[ "$hours" =~ ^[1-9][0-9]*$ ]] || { echo "ORE deve essere intero positivo" >&2; exit 2; }

find "$dir" -type f -mmin "-$((hours*60))" -print

Esercizio 4 — Leggere CSV: somma per colonna (awk)

Dato un CSV con separatore "," e intestazione, calcola la somma della colonna amount (numeri con punto

decimale). Stampa la somma con 2 decimali.

Soluzione

#!/bin/bash set -euo pipefail [[ $# -eq 1 ]] || { echo "Uso: $0 FILE.csv" >&2; exit 2; } f="$1" [[ -r "$f" ]] || exit 1

awk -F',' ' NR==1 { for (i=1;i<=NF;i++) if ($i=="amount") col=i if (!col) { exit 3 } next } { gsub(/^[ \t]+|[ \t]+$/, "", $col) sum += $col } END { printf("%.2f\n", sum) } ' "$f"

Esercizio 5 — Funzioni: log + livelli + timestamp

Definisci una funzione log : log LEVEL MESSAGE...; LEVEL può essere INFO|WARN|ERROR. Stampa su

stderr: "YYYY-mm-dd HH:MM:SS [LEVEL] messaggio". Poi mostra un esempio d’uso.

Soluzione

#!/bin/bash set -euo pipefail

log() { local level="$1"; shift case "$level" in INFO|WARN|ERROR) ;; ) level="INFO" ;; esac local ts ts="$(date '+%F %T')" echo "$ts [$level] $" >& }

log INFO "Avvio" log WARN "Questo è un warning" log ERROR "Qualcosa è andato storto"

Esercizio 6 — Trap: cleanup file temporanei

Crea un file temporaneo con mktemp , scrivici qualcosa e poi simula un errore. Il file deve essere cancellato

SEMPRE (EXIT, INT, TERM).

Soluzione

#!/bin/bash set -euo pipefail

tmp="$(mktemp)" cleanup() { rm -f "$tmp"; } trap cleanup EXIT INT TERM

echo "dati temporanei" > "$tmp" echo "Creato: $tmp" >&

false

Soluzione

#!/bin/bash set -euo pipefail [[ $# -eq 1 ]] || { echo "Uso: $0 LOGFILE" >&2; exit 2; } logf="$1" [[ -r "$logf" ]] || exit 1

total=$(wc -l < "$logf") errcount=$(grep -c "ERROR" -- "$logf" || true)

echo "Totale righe: $total" echo "Righe ERROR: $errcount" echo "Top 5 moduli (solo ERROR):"

grep "ERROR" -- "$logf"
| sed -n 's/.[([^]]+)]./\1/p'
| sort | uniq -c | sort -nr | head -n 5