Pagina 1 di 2
Poche righe per script banale
Inviato: lun 30 giu 2008, 1:32
da legionario
Un saluto a tutti!
Avrei la necessita' di scrivere in bash il codice per effettuare i seguenti passaggi:
1. montaggio di una periferica;
2. smontaggio;
3. ripetizione dei punti 1 e 2 per un numero x di volte;
4. calcolo e stampa a video del tempo complessivo impiegato per effettuare tutte le operazioni.
Ovviamente vi starete chiedendo a cosa potrebbe servire uno script del genere...e' solo per scopi didattici.
Sarei grato a chiunque riesca ad aiutarmi!
PS: non sono previste ricompense...

Re: Poche righe per script banale
Inviato: lun 30 giu 2008, 7:57
da d4z_c0nf
legionario ha scritto:Un saluto a tutti!
Avrei la necessita' di scrivere in bash il codice per effettuare i seguenti passaggi:
1. montaggio di una periferica;
2. smontaggio;
3. ripetizione dei punti 1 e 2 per un numero x di volte;
4. calcolo e stampa a video del tempo complessivo impiegato per effettuare tutte le operazioni.
Ovviamente vi starete chiedendo a cosa potrebbe servire uno script del genere...e' solo per scopi didattici.
Sarei grato a chiunque riesca ad aiutarmi!
PS: non sono previste ricompense...

Codice: Seleziona tutto
#!/bin/bash
function imount(){
for i in $(seq 1 $N); do
mount $PERIF $MOUNTP
umount $PERIF
done
}
#main
MOUNTP=/mnt/prova
PERIF=/dev/sda1
N=2
if [[ ! -d $MOUNTP ]]; then
mkdir $MOUNTP
fi
time imount
rmdir $MOUNTP
Una cosa del genere?...
Attento perchè la prima volta potrebbe fallire, dopo aver fisicamente attaccato la periferica (diciamo una penna usb) dai il tempo al sistema di riconscerla prima di lanciare il comando.
Magari la si può considerare questa cosa con dei controlli sulla riuscita delle operazioni, ma questo creerebbe comunque delle attese attive che andrebbero a "corrompere" il tempo impiegato per l'operazione.
Spero ti possa essere d'aiuto.
rock
Re: Poche righe per script banale
Inviato: lun 30 giu 2008, 10:47
da legionario
d4z_c0nf ha scritto:
Codice: Seleziona tutto
#!/bin/bash
function imount(){
for i in $(seq 1 $N); do
mount $PERIF $MOUNTP
umount $PERIF
done
}
#main
MOUNTP=/mnt/prova
PERIF=/dev/sda1
N=2
if [[ ! -d $MOUNTP ]]; then
mkdir $MOUNTP
fi
time imount
rmdir $MOUNTP
Una cosa del genere?...
Attento perchè la prima volta potrebbe fallire, dopo aver fisicamente attaccato la periferica (diciamo una penna usb) dai il tempo al sistema di riconscerla prima di lanciare il comando.
Magari la si può considerare questa cosa con dei controlli sulla riuscita delle operazioni, ma questo creerebbe comunque delle attese attive che andrebbero a "corrompere" il tempo impiegato per l'operazione.
Spero ti possa essere d'aiuto.
rock
Ti ringrazio. Sei stato gentilissimo. Solo una domanda:
in che modo potrei far apparire, alla fine, una stringa di testo che mi specifichi il tempo impiegato per l'esecuzione della funzione? Cioe' vorrei che apparisse una scritta del genere:
"tempo impiegato per l'esecuzione: X secondi"
Grazie ancora
Ciao
Re: Poche righe per script banale
Inviato: lun 30 giu 2008, 12:09
da d4z_c0nf
legionario ha scritto:d4z_c0nf ha scritto:
Codice: Seleziona tutto
#!/bin/bash
function imount(){
for i in $(seq 1 $N); do
mount $PERIF $MOUNTP
umount $PERIF
done
}
#main
MOUNTP=/mnt/prova
PERIF=/dev/sda1
N=2
if [[ ! -d $MOUNTP ]]; then
mkdir $MOUNTP
fi
time imount
rmdir $MOUNTP
Una cosa del genere?...
Attento perchè la prima volta potrebbe fallire, dopo aver fisicamente attaccato la periferica (diciamo una penna usb) dai il tempo al sistema di riconscerla prima di lanciare il comando.
Magari la si può considerare questa cosa con dei controlli sulla riuscita delle operazioni, ma questo creerebbe comunque delle attese attive che andrebbero a "corrompere" il tempo impiegato per l'operazione.
Spero ti possa essere d'aiuto.
rock
Ti ringrazio. Sei stato gentilissimo. Solo una domanda:
in che modo potrei far apparire, alla fine, una stringa di testo che mi specifichi il tempo impiegato per l'esecuzione della funzione? Cioe' vorrei che apparisse una scritta del genere:
"tempo impiegato per l'esecuzione: X secondi"
Grazie ancora
Ciao
Come hai notato il comando time ti offre più risposte.. a quale in particolare sei interessato?
rock
Re: Poche righe per script banale
Inviato: lun 30 giu 2008, 12:16
da legionario
Mi interessa il campo real, cioe' l'effettivo elapsed time...
A proposito ma user e sys a cosa si riferiscono? Perche' hanno tempi diversi?
Re: Poche righe per script banale
Inviato: lun 30 giu 2008, 12:37
da d4z_c0nf
legionario ha scritto:Mi interessa il campo real, cioe' l'effettivo elapsed time...
A proposito ma user e sys a cosa si riferiscono? Perche' hanno tempi diversi?
dai
ti spiega che significa:
in pratica quanto tempo è speso in
user mode
e
kernel mode
Dovresti saperne un po' di sistemi operativi per capire la differenza che intercorre. Cerca un po' in rete:
modalità supervisore e modalità utente.
Per estrapolare solo real non riesco a farlo...pare che non si comporti come un classico comando (processo) unix..non riesco a reinderizzarne l'output. sorry.
Magari qualcuno ne conosce il motivo e sa risolvere il problema ?!
rock
Re: Poche righe per script banale
Inviato: lun 30 giu 2008, 12:51
da legionario
Grazie lo stesso per la disponibilita'. Spero che nel frattempo qualcuno riesca a risolvere l'arcano
Ciao
Re: Poche righe per script banale
Inviato: lun 30 giu 2008, 14:27
da Mario Vanoni
d4z_c0nf ha scritto:
dai
rock
Piccola confusione ...
man time si riferisce a /usr/bin/time
chiamando time xyz dalla bash
e` uno shell built-in, quindi man bash
EDIT: e non dimenticare il built-in times!
Re: Poche righe per script banale
Inviato: lun 30 giu 2008, 20:07
da d4z_c0nf
Mario Vanoni ha scritto:d4z_c0nf ha scritto:
dai
rock
Piccola confusione ...
man time si riferisce a /usr/bin/time
chiamando time xyz dalla bash
e` uno shell built-in, quindi man bash
EDIT: e non dimenticare il built-in times!
Mario scusami ma nn ho capito,
dici che la pagina del manuale che gli ho consigliato non fa riferimento al comando in questione?
rock
Re: Poche righe per script banale
Inviato: lun 30 giu 2008, 20:17
da targzeta
d4z_c0nf ha scritto:...
dici che la pagina del manuale che gli ho consigliato non fa riferimento al comando in questione?
...
Bhé, dipende, se, facendo
risulta
time is a shell keyword
allora si, il manuale da consultare è bash(1).
Se invece risulta
time is hashed (/usr/bin/time)
allora il manuale da consultare è time(1).
Spina
Re: Poche righe per script banale
Inviato: lun 30 giu 2008, 21:29
da d4z_c0nf
Grazie ad entrambi ora ho capito.
L'unico problema è che non riesco a usare /usr/bin/time su una funzione dello script.
La soluzione più facile diventa dividere lo script in due file, uno che monta e smonta N volte e l'altro che calcola il tempo di esecuzione del primo.
Se nessuno ha idee e se ti interessa lo stesso (legionario) ti posto i due script.
rock
Re: Poche righe per script banale
Inviato: lun 30 giu 2008, 21:35
da Mario Vanoni
d4z_c0nf ha scritto:Grazie ad entrambi ora ho capito.
L'unico problema è che non riesco a usare /usr/bin/time su una funzione dello script.
La soluzione più facile diventa dividere lo script in due file, uno che monta e smonta N volte e l'altro che calcola il tempo di esecuzione del primo.
Se nessuno ha idee e se ti interessa lo stesso (legionario) ti posto i due script.
rock
Nello script devi mettere
/usr/bin/time con tutto il path!
Nei miei script non uso _mai_ echo, sempre e solo
/bin/echo
portabile su ogni macchina.
Re: Poche righe per script banale
Inviato: lun 30 giu 2008, 21:46
da d4z_c0nf
Mario Vanoni ha scritto:d4z_c0nf ha scritto:Grazie ad entrambi ora ho capito.
L'unico problema è che non riesco a usare /usr/bin/time su una funzione dello script.
La soluzione più facile diventa dividere lo script in due file, uno che monta e smonta N volte e l'altro che calcola il tempo di esecuzione del primo.
Se nessuno ha idee e se ti interessa lo stesso (legionario) ti posto i due script.
rock
Nello script devi mettere
/usr/bin/time con tutto il path!
Nei miei script non uso _mai_ echo, sempre e solo
/bin/echo
portabile su ogni macchina.
sì sì certo metto quello, intendevo dire che se come paramatro a
/usr/bin/time
do una funzione dello script stesso mi risponde
Codice: Seleziona tutto
/usr/bin/time: cannot run imount: No such file or directory
Command exited with non-zero status 127
dove imount è la funzione interna allo script.
Quindi l'unica soluzione è dividere lo script in due file.
Re: Poche righe per script banale
Inviato: lun 30 giu 2008, 22:18
da Mario Vanoni
d4z_c0nf ha scritto:Mario Vanoni ha scritto:d4z_c0nf ha scritto:Grazie ad entrambi ora ho capito.
L'unico problema è che non riesco a usare /usr/bin/time su una funzione dello script.
La soluzione più facile diventa dividere lo script in due file, uno che monta e smonta N volte e l'altro che calcola il tempo di esecuzione del primo.
Se nessuno ha idee e se ti interessa lo stesso (legionario) ti posto i due script.
rock
Nello script devi mettere
/usr/bin/time con tutto il path!
Nei miei script non uso _mai_ echo, sempre e solo
/bin/echo
portabile su ogni macchina.
sì sì certo metto quello, intendevo dire che se come paramatro a
/usr/bin/time
do una funzione dello script stesso mi risponde
Codice: Seleziona tutto
/usr/bin/time: cannot run imount: No such file or directory
Command exited with non-zero status 127
dove imount è la funzione interna allo script.
Quindi l'unica soluzione è dividere lo script in due file.
Esatto, /usr/bin/time aspetta un file, non una funzione della shell.
Re: Poche righe per script banale
Inviato: lun 30 giu 2008, 22:22
da d4z_c0nf
Mario Vanoni ha scritto:
Esatto, /usr/bin/time aspetta un file, non una funzione della shell.
perfetto è quello che intendevo.
rock