[Sistemi Operativi] Script Shell

Messaggioda giacomovicinanza » 24/02/2022, 19:25

Salve a tutti. Ho alcune perplessità riguardante questo esercizio. Non sono sicuro di averlo svolto correttamente. Se qualcuno sarebbe così gentile di visionarlo. Grazie mille :)

Codice:
# Realizzare uno script per la shell bash (completando il codice fornito
# nella traccia) che prende come parametri sulla linea di comando il nome di
# una directory e una stringa.
# Lo script deve controllare che ci siano esattamente due parametri
# sulla linea di comando, e che il primo sia il nome di una directory;
# in caso contrario,lo script deve scrivere un messaggio di errore e terminare
# immediatamente la sua esecuzione.
# Altrimenti, lo script deve trovare nella directory indicata come
# primo parametro tutti i file il cui nome termina con ".txt", e
# per ciascun file deve stampare un messaggio che indica se il file
# contiene o non contiene la stringa passata come secondo parametro.
# Infine, lo script deve stampare il numero di file trovati che
# contengono la stringa.
#
# SUGGERIMENTI
# - il comando
#     grep --quiet stringa nomefile
#   può essere usato per verificare se un file contiene una certa stringa;
#   se la stringa è presente, l'exit status è 0, altrimenti l'exit status
#   è diverso da 0.
# NOTA: il codice fornito provvede a creare alcuni file
# nella directory myfiles, in modo da poter testare lo script.
#
# Esempio:
# lanciando lo script con il comando:
#     ./main.sh myfiles ESAME
# lo script deve produrre come output:
#    Il file myfiles/file2.txt contiene la stringa ESAME
#    Il file myfiles/file3.txt contiene la stringa ESAME
#    Il file myfiles/file4.txt NON contiene la stringa ESAME
#    Trovati 2 files contenenti la stringa ESAME
#
# Esempio:
# lanciando lo script con il comando:
#     ./main.sh myfiles ALTRE
# lo script deve produrre come output:
#    Il file myfiles/file2.txt NON contiene la stringa ALTRE
#    Il file myfiles/file3.txt NON contiene la stringa ALTRE
#    Il file myfiles/file4.txt contiene la stringa ALTRE
#    Trovati 1 files contenenti la stringa ALTRE
#


# --- le seguenti istruzioni creano i file per il test nella ---
# --- directory 'myfiles'---
#! /bin/bash
mkdir myfiles
cat > myfiles/file1.dat << EOF
0 12 ESAME
12 0
2 1
EOF

cat > myfiles/file2.txt << EOF
0 12
ESAME 33
2 1
EOF

cat > myfiles/file3.txt << EOF
22 ESAME
12 0
2 1
EOF

cat > myfiles/file4.txt << EOF
22 ALTRE PAROLE
12 0
2 1
EOF


Questo è il codice scritto da me
Codice:
if[[ "$#" != 2 ]]; then
echo "Devi passare solo due argomenti, ovvero il nome della directory e la stringa"
exit 1
fi

if [[ -d "$1"]]; then
echo "Errore verificato non è una directory"
exit 1
fi

for myfiles in $1/*; do
find . -iname '*.txt' -type f -exec echo '{}' >> '$1'';'
for myfiles in $(ls *.txt); do
grep --quiet
done
done
exit 0
giacomovicinanza
Junior Member
Junior Member
 
Messaggio: 87 di 218
Iscritto il: 18/08/2021, 15:55

Re: [Sistemi Operativi] Script Shell

Messaggioda kaspar » 26/02/2022, 08:28

Vorrai dire "if [[ ! -d $1 ]]; ...", forse...

Il find a cosa ti serve, non lo usi. E poi, attenzione a che virgolette usi con $1 nel find. Te lo avevo spiegato qualche discussione fa.

Se vuoi ciclare sui file ".txt" puoi fare così:
Codice:
for f in $1/*.txt; ...

per evitare
Codice:
for myfiles in $(ls *.txt); ...

L'altro loop a cosa ti serve? [Spoiler: oltre a non avere senso, a niente.]

Usi male il grep: rileggi il suggerimento che ti è stato dato.

Ricorda che per richiamare l'exit status del comando più recente c'è $?. Usalo.
kaspar
Junior Member
Junior Member
 
Messaggio: 245 di 495
Iscritto il: 17/11/2019, 09:58

Re: [Sistemi Operativi] Script Shell

Messaggioda giacomovicinanza » 26/02/2022, 12:22

Codice:
if[[ "$#" != 2 ]]; then
echo "Devi passare solo due argomenti, ovvero il nome della directory e la stringa"
exit 1
fi

if [[ ! -d "$1"]]; then
echo "Errore verificato non è una directory"
exit 1
fi

for f in $1/*.txt; do
if [[ grep --q f '*.txt' ]] then
echo "IL file contiene la stringa"
else "Il file non contiene la stringa"
fi
done
exit $?
giacomovicinanza
Junior Member
Junior Member
 
Messaggio: 88 di 218
Iscritto il: 18/08/2021, 15:55

Re: [Sistemi Operativi] Script Shell

Messaggioda kaspar » 27/02/2022, 18:42

Ciao. Intendevo una cosa così.
Codice:
# ...

for f in $1/*.txt; do
  # grep fa cose, "--quiet" lo silenzia.
  # Quando finisce, emette un exit status
  # che viene catturato da ?.
  grep --quiet "$2" "$f"
  if [[ $? == 0 ]]
    then
      # ...
    else
      # ...
fi
done
kaspar
Junior Member
Junior Member
 
Messaggio: 246 di 495
Iscritto il: 17/11/2019, 09:58

Re: [Sistemi Operativi] Script Shell

Messaggioda giacomovicinanza » 02/03/2022, 11:18

Capito. grazie mille
giacomovicinanza
Junior Member
Junior Member
 
Messaggio: 97 di 218
Iscritto il: 18/08/2021, 15:55


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite