Repository 32bit  Forum
Repository 64bit  Wiki

Poche righe per script banale

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

Poche righe per script banale

Messaggioda legionario » lun giu 30, 2008 0:32

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... :lol:
Avatar utente
legionario
Linux 2.6
Linux 2.6
 
Messaggi: 603
Iscritto il: mer dic 08, 2004 0:00
Località: Bergamo - Roma

Re: Poche righe per script banale

Messaggioda d4z_c0nf » lun giu 30, 2008 6:57

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... :lol:


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
Avatar utente
d4z_c0nf
Packager
Packager
 
Messaggi: 1293
Iscritto il: mar mar 14, 2006 18:07
Località: Salerno
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce

Re: Poche righe per script banale

Messaggioda legionario » lun giu 30, 2008 9:47

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
Avatar utente
legionario
Linux 2.6
Linux 2.6
 
Messaggi: 603
Iscritto il: mer dic 08, 2004 0:00
Località: Bergamo - Roma

Re: Poche righe per script banale

Messaggioda d4z_c0nf » lun giu 30, 2008 11:09

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
Avatar utente
d4z_c0nf
Packager
Packager
 
Messaggi: 1293
Iscritto il: mar mar 14, 2006 18:07
Località: Salerno
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce

Re: Poche righe per script banale

Messaggioda legionario » lun giu 30, 2008 11:16

Mi interessa il campo real, cioe' l'effettivo elapsed time...

A proposito ma user e sys a cosa si riferiscono? Perche' hanno tempi diversi?
Avatar utente
legionario
Linux 2.6
Linux 2.6
 
Messaggi: 603
Iscritto il: mer dic 08, 2004 0:00
Località: Bergamo - Roma

Re: Poche righe per script banale

Messaggioda d4z_c0nf » lun giu 30, 2008 11:37

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
Codice: Seleziona tutto
man time


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
Avatar utente
d4z_c0nf
Packager
Packager
 
Messaggi: 1293
Iscritto il: mar mar 14, 2006 18:07
Località: Salerno
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce

Re: Poche righe per script banale

Messaggioda legionario » lun giu 30, 2008 11:51

Grazie lo stesso per la disponibilita'. Spero che nel frattempo qualcuno riesca a risolvere l'arcano

Ciao
Avatar utente
legionario
Linux 2.6
Linux 2.6
 
Messaggi: 603
Iscritto il: mer dic 08, 2004 0:00
Località: Bergamo - Roma

Re: Poche righe per script banale

Messaggioda Mario Vanoni » lun giu 30, 2008 13:27

d4z_c0nf ha scritto:dai
Codice: Seleziona tutto
man time

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 Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: Poche righe per script banale

Messaggioda d4z_c0nf » lun giu 30, 2008 19:07

Mario Vanoni ha scritto:
d4z_c0nf ha scritto:dai
Codice: Seleziona tutto
man time

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
Avatar utente
d4z_c0nf
Packager
Packager
 
Messaggi: 1293
Iscritto il: mar mar 14, 2006 18:07
Località: Salerno
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce

Re: Poche righe per script banale

Messaggioda targzeta » lun giu 30, 2008 19:17

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
Codice: Seleziona tutto
type time
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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6155
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: Poche righe per script banale

Messaggioda d4z_c0nf » lun giu 30, 2008 20:29

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
Avatar utente
d4z_c0nf
Packager
Packager
 
Messaggi: 1293
Iscritto il: mar mar 14, 2006 18:07
Località: Salerno
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce

Re: Poche righe per script banale

Messaggioda Mario Vanoni » lun giu 30, 2008 20:35

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.
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: Poche righe per script banale

Messaggioda d4z_c0nf » lun giu 30, 2008 20:46

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.
Avatar utente
d4z_c0nf
Packager
Packager
 
Messaggi: 1293
Iscritto il: mar mar 14, 2006 18:07
Località: Salerno
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce

Re: Poche righe per script banale

Messaggioda Mario Vanoni » lun giu 30, 2008 21:18

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.
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: Poche righe per script banale

Messaggioda d4z_c0nf » lun giu 30, 2008 21:22

Mario Vanoni ha scritto:
Esatto, /usr/bin/time aspetta un file, non una funzione della shell.


perfetto è quello che intendevo.
rock
Avatar utente
d4z_c0nf
Packager
Packager
 
Messaggi: 1293
Iscritto il: mar mar 14, 2006 18:07
Località: Salerno
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce

Prossimo

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite