[sistemi operativi] script shell
Salve a tutti. Ho alcune perplessità riguardante questo esercizio. Non sono sicuro di averlo svolto correttamente. Se qualcuno sarebbe così gentile di visionarlo. Questo è l'ultimo esercizio che propongo sul forum. Ringrazio tutti coloro che mi hanno aiutato e mi scuso per avervi fatto perdere tempo XD
https://onlinegdb.com/CN6UB3vu9 --> link del codice
https://onlinegdb.com/CN6UB3vu9 --> link del codice
#! /bin/bash # Progettare uno script che prende un parametro che indica il nome di una # directory e sia in grado di esaminare tutti gli elementi della directory, # senza entrare nelle eventuali sotto-directory; # lo script, per ciascun elemento trovato nella directory, deve # scrivere in un file denominato "summary.out" (nella directory corrente), # un "sommario" dell'elemento secondo le sueguenti modalità: # 1) se l'elemento è un file, lo script deve riportare nel sommario il nome del # file e la sua prima riga # 2) se l'elemento è una sottodirectory, lo script deve riportare nel sommario # il nome della sottodirectory e il numero di file # in essa contenuti. # Si controlli che il parametro passato sulla linea di comando sia uno e che # sia il nome di una directory. # # SUGGERIMENTO # - Per stampare la prima riga di un file, si può usare il comando # head -n 1 NOMEFILE # - Per ottenere il numero di elementi di una directory si può usare # il comando ls (che scrive in output i contenuti di una directory) # in combinazione con il comando wc -l (che scrive in output il numero # di linee del suo input). # # Esempio: eseguendo il comando: # ./summary.sh myfiles # verrà creato un file summary.out con il seguente contenuto: # FILE myfiles/file1.txt: la vispa # FILE myfiles/file2.txt: sotto la panca # FILE myfiles/input.dat: riga uno # SOTTODIRECTORY myfiles/myfiles2: 1 # # Le seguenti istruzioni creano i file e le sottodirectory per il test mkdir myfiles mkdir myfiles/myfiles2 cat > myfiles/input.dat << EOF riga uno riga due riga tre EOF cat > myfiles/file1.txt << EOF la vispa Teresa avea tra l'erbetta EOF cat > myfiles/file2.txt << EOF sotto la panca la capra campa sopra la panca la capra crepa EOF cat > myfiles/myfiles2/file3.txt << EOF altro file EOF # INSERIRE QUI IL CODICE if[[ "$#" != 1 ]]; then echo "Devi passare solo un argomento, ovvero il nome della directory" exit 1 fi for myfiles in $(ls); do if [[ -f "$file" ]]; then find . -iname '*.txt' -type f head -n 1 "summary.out" elif [[ -d "myfile" ]]; then num=$((num+1)) echo "Ci sono $num file in $1" head -n 1 "summary.out" fi done exit 0
Risposte
Prova a guardare la mia soluzione.
Non mi metto a commentare riga per riga perche' e' abbastanza ovvio.
Ti consiglio di leggerti i manuali dei vari comandi, guardare tanti esempi in rete e fare tante prove e piccoli esperimenti per capire e vedere se hai capito.
Solo cosi' si impara.
Non mi metto a commentare riga per riga perche' e' abbastanza ovvio.
Ti consiglio di leggerti i manuali dei vari comandi, guardare tanti esempi in rete e fare tante prove e piccoli esperimenti per capire e vedere se hai capito.
Solo cosi' si impara.
if [[ $# != 1 ]]; then echo "Devi passare solo un argomento, ovvero il nome della directory" exit 1 fi echo > summary.out for myfile in $(ls $1); do comPath=$1"/"$myfile echo $comPath if [[ -f $comPath ]]; then echo "FILE "$comPath": "$(head -n 1 $comPath) >> summary.out elif [[ -d $comPath ]]; then echo "SOTTODIRECTORY "$comPath": "$(echo ls -b $comPath | wc -l ) >> summary.out fi done exit 0
Grazie mille
