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 3.x
Linux 3.x
Messaggi: 603
Iscritto il: mer 8 dic 2004, 0:00
Località: Bergamo - Roma

Poche righe per script banale

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

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: Poche righe per script banale

Messaggio 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... :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 3.x
Linux 3.x
Messaggi: 603
Iscritto il: mer 8 dic 2004, 0:00
Località: Bergamo - Roma

Re: Poche righe per script banale

Messaggio 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

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: Poche righe per script banale

Messaggio 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

Avatar utente
legionario
Linux 3.x
Linux 3.x
Messaggi: 603
Iscritto il: mer 8 dic 2004, 0:00
Località: Bergamo - Roma

Re: Poche righe per script banale

Messaggio 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?

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: Poche righe per script banale

Messaggio 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

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 3.x
Linux 3.x
Messaggi: 603
Iscritto il: mer 8 dic 2004, 0:00
Località: Bergamo - Roma

Re: Poche righe per script banale

Messaggio da legionario »

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 3 set 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

Messaggio da Mario Vanoni »

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 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: Poche righe per script banale

Messaggio da d4z_c0nf »

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: 6562
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Poche righe per script banale

Messaggio 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

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 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: Poche righe per script banale

Messaggio 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

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 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

Messaggio 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.

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: Poche righe per script banale

Messaggio 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.

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 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

Messaggio 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.

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: Poche righe per script banale

Messaggio da d4z_c0nf »

Mario Vanoni ha scritto:
Esatto, /usr/bin/time aspetta un file, non una funzione della shell.
perfetto è quello che intendevo.
rock

Rispondi