[Sistemi Operativi] Script Shell

Messaggioda giacomovicinanza » 11/02/2022, 10:01

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 :)

Progettare uno script che prenda un parametro sulla linea di comando
che indica il nome di un file; lo script crea un file il cui nome è
quello passato sulla linea comando e contenente l'elenco di tutte le directory
contenute nella directory corrente e il cui nome inizia "D" maiuscola.
Si controlli che il numero di parametri passati sulla linea di comando sia 1
# NOTA: il codice fornito provvede a creare i file necessari nella directory corrente.
# Suggerimento
# Si puo' usare il comando:
# cut -c1
# che scrive sul suo output il primo dei
# caratteri di ogni linea del suo input, per estrarre la prima
# lettera del nome di una directory.
#
#
# Esempio: il comando: ./cercaDir.sh elenco.txt
# potrebbe produrre come risultato un file elenco.txt contenente le seguenti
# linee:
#
# Dir1
# Dir3
#

# --- create test input files ---
#!/bin/bash
mkdir -p myfiles
mkdir -p Dir1
mkdir -p dir2
mkdir -p AltroNome
mkdir -p Dir3
echo Prova > Dir4.txt

Codice:
#!/bin/bash
if[[ $# != 1 ]]; then
echo "Devi passare solo un argomento, ovvero il nome della directory"
exit 1
fi

touch "$1"
find . -name "D*" -type d -exec echo '{}' >> '$1' ';'

exit 0
Ultima modifica di giacomovicinanza il 12/02/2022, 11:12, modificato 1 volta in totale.
giacomovicinanza
Junior Member
Junior Member
 
Messaggio: 74 di 218
Iscritto il: 18/08/2021, 15:55

Re: [Sistemi Operativi] Script Shell

Messaggioda kaspar » 11/02/2022, 19:59

Non hai bisogno del touch, echo ... >> ... crea il file se non c'è. Se gli exit non hanno una vera e propria ragione, puoi riarrangiare la cosa con if-then-else-fi. E poi, la ricerca delle directories che profondità deve avere? (Magari ricorsivamente?)
kaspar
Junior Member
Junior Member
 
Messaggio: 237 di 495
Iscritto il: 17/11/2019, 09:58

Re: [Sistemi Operativi] Script Shell

Messaggioda giacomovicinanza » 12/02/2022, 11:15

Ho aggiornato la traccia per sbaglio avevo omesso com'è sviluppata
giacomovicinanza
Junior Member
Junior Member
 
Messaggio: 76 di 218
Iscritto il: 18/08/2021, 15:55

Re: [Sistemi Operativi] Script Shell

Messaggioda giacomovicinanza » 12/02/2022, 11:29

Personalmente non so come risolverlo :/
giacomovicinanza
Junior Member
Junior Member
 
Messaggio: 77 di 218
Iscritto il: 18/08/2021, 15:55

Re: [Sistemi Operativi] Script Shell

Messaggioda giacomovicinanza » 12/02/2022, 14:24

Codice:
#!/bin/bash
if[[ $# != 1 ]]; then
echo "Devi passare solo un argomento, ovvero il nome della directory"
exit 1
fi
if [[ -e "$#" ]]; then
echo "Il file $# esiste!"
else
mkdir ./cercaDir.sh/elenco.txt
fi
fi

find . -name "D*" -type d -exec echo '{}' >> '$1'';'
exit 0
giacomovicinanza
Junior Member
Junior Member
 
Messaggio: 78 di 218
Iscritto il: 18/08/2021, 15:55

Re: [Sistemi Operativi] Script Shell

Messaggioda kaspar » 12/02/2022, 17:28

Il tuo primo tentativo va bene. Leggi i commenti nello script qui sotto.
Codice:
#!/bin/bash

# Uno e un solo argomento, altrimenti muori.
if [[ $# != 1 ]]; then
  # Potresti voler trattare il messaggio come un errore, facendo così:
  #   echo "..." > /dev/stderr
  echo ":: Devi passare solo un argomento!"
  exit 1
fi

# Il comando echo appende le righe al file esistente, quindi potresti
# volerlo eliminare prima di scriverci altro attraverso questo script.
[[ -f $1 ]] && rm -rf $1

# Non me ne ero accorto. ATTENZIONE: tu avevi quotato $1 con
# le virgolette singole (i.e. '$1'); invece usa le virgolette doppie
# (oppure non metterle proprio), perché 1 deve essere espanso.
find . -name "D*" -type d -exec echo '{}' >> $1 \;
# Ad esemperimento puoi fare questa cosa: lascia pure le virgolette
# singole; nella cartella attuale troverai un file di testo chiamato
# proprio $1...

# Ti serve questa cosa qui? Puoi non farlo, tanto alla fine se dai
#   echo $?
# il terminale ti risponde 0.
exit 0


Riguardo al tuo tentativo più recente, solo un appunto.
Codice:
if [[ -e "$#" ]]; then
echo "Il file $# esiste!"
else
mkdir ./cercaDir.sh/elenco.txt
fi


A parte il fatto che non so cosa pensi di farci, c'è un errore pesante. $# è un intero, e penso che tu voglia chiederti dell'esistenza dell'unico argomento passato da linea d comando. In tal caso [[ -f $1 ]].
kaspar
Junior Member
Junior Member
 
Messaggio: 238 di 495
Iscritto il: 17/11/2019, 09:58

Re: [Sistemi Operativi] Script Shell

Messaggioda giacomovicinanza » 13/02/2022, 10:12

Codice:
#!/bin/bash
if[[ $# != 1 ]]; then
echo "Devi passare solo un argomento, ovvero il nome della directory"
exit 1
fi

[[ -f $1 ]] && rm -rf $1
find . -name "D*" -type d -exec echo '{}' >> '$1'';'
echo $?
giacomovicinanza
Junior Member
Junior Member
 
Messaggio: 79 di 218
Iscritto il: 18/08/2021, 15:55

Re: [Sistemi Operativi] Script Shell

Messaggioda giacomovicinanza » 17/02/2022, 18:35

kaspar ha scritto:Il tuo primo tentativo va bene. Leggi i commenti nello script qui sotto.
Codice:
#!/bin/bash

# Uno e un solo argomento, altrimenti muori.
if [[ $# != 1 ]]; then
  # Potresti voler trattare il messaggio come un errore, facendo così:
  #   echo "..." > /dev/stderr
  echo ":: Devi passare solo un argomento!"
  exit 1
fi

# Il comando echo appende le righe al file esistente, quindi potresti
# volerlo eliminare prima di scriverci altro attraverso questo script.
[[ -f $1 ]] && rm -rf $1

# Non me ne ero accorto. ATTENZIONE: tu avevi quotato $1 con
# le virgolette singole (i.e. '$1'); invece usa le virgolette doppie
# (oppure non metterle proprio), perché 1 deve essere espanso.
find . -name "D*" -type d -exec echo '{}' >> $1 \;
# Ad esemperimento puoi fare questa cosa: lascia pure le virgolette
# singole; nella cartella attuale troverai un file di testo chiamato
# proprio $1...

# Ti serve questa cosa qui? Puoi non farlo, tanto alla fine se dai
#   echo $?
# il terminale ti risponde 0.
exit 0


Riguardo al tuo tentativo più recente, solo un appunto.
Codice:
if [[ -e "$#" ]]; then
echo "Il file $# esiste!"
else
mkdir ./cercaDir.sh/elenco.txt
fi


A parte il fatto che non so cosa pensi di farci, c'è un errore pesante. $# è un intero, e penso che tu voglia chiederti dell'esistenza dell'unico argomento passato da linea d comando. In tal caso [[ -f $1 ]].


Grazie mille per avermi aiutato :)
giacomovicinanza
Junior Member
Junior Member
 
Messaggio: 80 di 218
Iscritto il: 18/08/2021, 15:55


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite