Pagina 1 di 1

[bash] verificare che un file config sia stato modificato

Inviato: gio 17 set 2009, 16:42
da danix
Ciao a tutti,
sto scrivendo un programmino in bash che mi permetta di caricare in più directory alcuni files tramite lftp, per gestirlo bene ho pensato di usare un file di configurazione separato, però mi è venuto un dubbio.
Ho messo i controlli per verificare che il file esista e sia leggibile, in caso contrario faccio uscire il programma con un warning, ma come faccio a sapere se il file è stato modificato inserendo i parametri per la connessione??

Vi faccio un esempio:
il programma verifica che il file non c'è, ne crea uno vuoto in /home/utente/.mioconfig ed esce
.mioconfig ha questo contenuto

Codice: Seleziona tutto

# questo è il file di configurazione per miaapp.sh, inserisci i dati corretti per la connessione.

ftp_server=""
ftp_user=""
ftp_pass=""
dir1=""
dir2=""
la seconda volta che lancerò miaapp.sh, non lamenterà l'assenza del file però, se io non l'ho modificato con i parametri, la connessione non potrà aver luogo ugualmente... come faccio a verificare che quelle variabili abbiano un valore prima di lanciare la connessione??
La cosa migliore che mi viene in mente è di usare || in un if, qualcosa del genere:

Codice: Seleziona tutto

if [[ ftp_server =="" || ftp_user =="" || ftp_pass == "" || dir1 == "" || dir2 =="" ]]; then
  echo "non hai scritto i parametri";
else
  echo "tutto ok"
fi
ma sono sicuro che ci siano metodi un po' più eleganti per fare la stessa cosa... solo che non li conosco (o non mi vengono in mente :( )...

chi mi indirizza sulla retta via?? :D

Grazie mille a tutti in anticipo...
ciau

Re: [bash] verificare che un file config sia stato modificato

Inviato: gio 17 set 2009, 17:59
da Paoletta
per vedere se una variabile è impostata puoi usare echo,
ma secondo me fai prima con un if perché controllare le variabili
una per una è una scelta ancora peggiore:

Codice: Seleziona tutto

if [ "$ftp_server" = "" -o "$ftp_user" = "" -o "$ftp_pass" = "" -o "$dir1" = "" -o "$dir2" = ""  ]; then echo "non hai scritto i parametri";
else
  echo "tutto ok"
fi

Re: [bash] verificare che un file config sia stato modificato

Inviato: gio 17 set 2009, 18:04
da sixjan

Codice: Seleziona tutto

if ! grep -q '=""' $HOME/.mioconfig; then echo tutto ok; fi

Re: [bash] verificare che un file config sia stato modificato

Inviato: gio 17 set 2009, 18:48
da Paoletta
sixjan ha scritto:

Codice: Seleziona tutto

if ! grep -q '=""' $HOME/.mioconfig; then echo tutto ok; fi
ottimo metodo...non conoscevo l'opzione -q di grep! grazie

Re: [bash] verificare che un file config sia stato modificato

Inviato: gio 17 set 2009, 18:51
da urka58
Scusa, ma se devi solo vedere se le variabili sono impostate (ed eventualmente corrette), basta un echo, che so...
echo "il server ftp è $mio_server_ftp"
echo "La password è $mia_password"
Per impostare le variabili, nel caso non lo fossero, ci possono essere varie implementazioni, dipende da cosa vuoi fare, se devono essere necessariamente tutte impostate, se usi un file source (come mi sembra)...
Ciao

Re: [bash] verificare che un file config sia stato modificato

Inviato: gio 17 set 2009, 19:05
da sixjan
Paoletta ha scritto:
sixjan ha scritto:

Codice: Seleziona tutto

if ! grep -q '=""' $HOME/.mioconfig; then echo tutto ok; fi
ottimo metodo...non conoscevo l'opzione -q di grep! grazie
Prego.

Re: [bash] verificare che un file config sia stato modificato

Inviato: gio 17 set 2009, 19:11
da danix
sixjan ha scritto:

Codice: Seleziona tutto

if ! grep -q '=""' $HOME/.mioconfig; then echo tutto ok; fi
a volte le soluzioni più semplici sono quelle che non ti vengono in mente ;)

grazie mille :D

Re: [bash] verificare che un file config sia stato modificato

Inviato: gio 17 set 2009, 19:36
da urka58
danix ha scritto:
sixjan ha scritto:

Codice: Seleziona tutto

if ! grep -q '=""' $HOME/.mioconfig; then echo tutto ok; fi
a volte le soluzioni più semplici sono quelle che non ti vengono in mente ;)

grazie mille :D
Senza nulla togliere a nessuno...ma così controlli solo che che le variabili non siano nulle, il valore può essere qualunque.
Se i parametri per la connessione sono fissi li inserisci nel tuo script e basta, se possono o devono cambiare devi verificare che siano anche corretti.
Magari non ho capito niente io...
Ciao

Re: [bash] verificare che un file config sia stato modificato

Inviato: ven 18 set 2009, 0:37
da murdock
danix ha scritto:
sixjan ha scritto:

Codice: Seleziona tutto

if ! grep -q '=""' $HOME/.mioconfig; then echo tutto ok; fi
a volte le soluzioni più semplici sono quelle che non ti vengono in mente ;)

grazie mille :D
Già, io stavo pensando addirittura ad un match md5 sul file .mioconfig... :D

Saluti,
MuRdOcK

Re: [bash] verificare che un file config sia stato modificato

Inviato: ven 18 set 2009, 18:28
da danix
urka58 ha scritto:Senza nulla togliere a nessuno...ma così controlli solo che che le variabili non siano nulle, il valore può essere qualunque.
Se i parametri per la connessione sono fissi li inserisci nel tuo script e basta, se possono o devono cambiare devi verificare che siano anche corretti.
Magari non ho capito niente io...
Ciao
Hai perfettamente ragione. Ho pensato di usare un file di conf di cui fare il source perchè così non devo andare ogni volta a modificare il file in /usr/local/bin, in questo modo gestisco meglio le cose senza scomodare root ;)
Riguardo al fatto che sarebbe meglio controllare se i parametri passati sono corretti ovviamente hai ragione, ma a me basta sapere se ho modificato il file, tanto un echo riguardante il server lo faccio sempre ;) così ho un colpo d'occhio sul sito su cui sto lavorando. Le cose sarebbero diverse se decidessi di rilasciare lo script al pubblico, ma per ora, sapere di aver modificato il file è già di per se più che sufficiente ;)

In ogni caso, tu come controlleresti se i dati sono corretti??

Re: [bash] verificare che un file config sia stato modificato

Inviato: ven 18 set 2009, 19:03
da urka58
Magari è un po' banale...

Codice: Seleziona tutto

cat mio_file.conf
read              # aspetta un imput per proseguire
clear             # se ti da noia continuare a vedere le variabili impostate
Giusto un'idea...
Ciao

PS: un filo meglio

Codice: Seleziona tutto

cat mio_file.conf
echo "Tutto apposto?, notare il neologismo..."
read risposta
[ $risposta == y ] || exit   # eviti il ctrl+c per uscire se qualcosa non va       
clear             # se ti da noia continuare a vedere le variabili impostate
PPS e poi basta!

Codice: Seleziona tutto

cat mio_file.conf
echo "Tutto apposto?, notare il neologismo..."
read risposta
[ $risposta == y ] || /usr/bin/pico mio_file.conf  # puoi modificare il file al volo
. mio_file.conf                                                
clear             # se ti da noia continuare a vedere le variabili impostate