[sistemi operativi] script shell

Messaggioda giacomovicinanza » 21/05/2022, 11:39

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

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
giacomovicinanza
Junior Member
Junior Member
 
Messaggio: 134 di 218
Iscritto il: 18/08/2021, 15:55

Re: [sistemi operativi] script shell

Messaggioda Quinzio » 21/05/2022, 14:04

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.

Codice:
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
Quinzio
Cannot live without
Cannot live without
 
Messaggio: 4904 di 10547
Iscritto il: 24/08/2010, 06:50

Re: [sistemi operativi] script shell

Messaggioda giacomovicinanza » 21/05/2022, 18:21

Grazie mille :)
giacomovicinanza
Junior Member
Junior Member
 
Messaggio: 135 di 218
Iscritto il: 18/08/2021, 15:55


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite