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

Poche righe per script banale

Messaggioda legionario » lun giu 30, 2008 1: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
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar mar 14, 2006 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce
Località: Salerno

Re: Poche righe per script banale

Messaggioda d4z_c0nf » lun giu 30, 2008 7: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
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 legionario » lun giu 30, 2008 10: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
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar mar 14, 2006 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce
Località: Salerno

Re: Poche righe per script banale

Messaggioda d4z_c0nf » lun giu 30, 2008 12: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
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 legionario » lun giu 30, 2008 12: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
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar mar 14, 2006 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce
Località: Salerno

Re: Poche righe per script banale

Messaggioda d4z_c0nf » lun giu 30, 2008 12: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
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 legionario » lun giu 30, 2008 12:51

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

Ciao

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun set 03, 2007 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: Poche righe per script banale

Messaggioda Mario Vanoni » lun giu 30, 2008 14: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!

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar mar 14, 2006 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce
Località: Salerno

Re: Poche righe per script banale

Messaggioda d4z_c0nf » lun giu 30, 2008 20: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
targzeta
Iper Master
Iper Master
Messaggi: 6415
Iscritto il: gio nov 03, 2005 14:05
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Poche righe per script banale

Messaggioda targzeta » lun giu 30, 2008 20: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
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar mar 14, 2006 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce
Località: Salerno

Re: Poche righe per script banale

Messaggioda d4z_c0nf » lun giu 30, 2008 21: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

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun set 03, 2007 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: Poche righe per script banale

Messaggioda Mario Vanoni » lun giu 30, 2008 21: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.

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar mar 14, 2006 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce
Località: Salerno

Re: Poche righe per script banale

Messaggioda d4z_c0nf » lun giu 30, 2008 21: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.

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun set 03, 2007 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: Poche righe per script banale

Messaggioda Mario Vanoni » lun giu 30, 2008 22: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.

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar mar 14, 2006 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce
Località: Salerno

Re: Poche righe per script banale

Messaggioda d4z_c0nf » lun giu 30, 2008 22:22

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


perfetto è quello che intendevo.
rock


Torna a “Programmazione”

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti