Pagina 1 di 1

shell script richiesta delucidazione

Inviato: mer 2 ago 2006, 9:18
da orso75
Salve a tutti
su http://www.shelldorado.com ho trovato questo script
##########################################################################
# Title : timestamp - periodically write time stamp
# Author : Heiner Steven <heiner.steven@odn.de>
# Date : 1994-02-04
# Requires :
# Category : Debugging
# SCCS-Id. : @(#) timestamp 1.2 03/12/19
##########################################################################
# Beschreibung:
#
##########################################################################

PN=`basename "$0"` # Program name
VER='1.2'

Sek=${1:-60} # Interval (seconds)
case "$Sek" in
[0-9][0-9]*)
;; # correct
*)
echo "$PN - print time stamp, $VER"
echo "usage: $PN [interval]"
echo
echo "Prints current time all <Intervall> seconds"
echo "(default: 60)."
exit 1
esac

while true
do
echo "--------------------------------(`date`)------"
sleep $Sek
done
se ho capito bene dovrebbe eseguire il timestamp ad intervalli regolari.
se passo un valore deve prendere il valore che passo in alternativa prende 60 secondi.

ho prvato a laciarlo come
timestamp 5 (refresh ogni 5 secondi e mi ritorna
timestamp.sh - print time stamp, 1.2
usage: timestamp.sh [interval]

Prints current time all <Intervall> seconds
(default: 60).

se invece lo lancio con valori a 2 o più cifre
10 100 1000 etc funziona

mi sapeste spiagare perch'è ed eventualmente come abilitare i 5 sec.
Grazie a tutti
Orso

Inviato: mer 2 ago 2006, 10:55
da bruno82

Codice: Seleziona tutto

case "$Sek" in
[0-9][0-9]*)
;; # correct
*)
echo "$PN - print time stamp, $VER"
echo "usage: $PN [interval]"
echo
echo "Prints current time all <Intervall> seconds"
echo "(default: 60)."
exit 1
esac 
Il problema è che riconosce solo numeri con 2 cifre in input (dati dall'espressione [0-9][0-9] ).

Basta aggiungere un altro caso...

Codice: Seleziona tutto

case "$Sek" in
[0-9][0-9]*)
;; # correct
[0-9]*)
;; # also correct!
*)
echo "$PN - print time stamp, $VER"
echo "usage: $PN [interval]"
echo
echo "Prints current time all <Intervall> seconds"
echo "(default: 60)."
exit 1
esac
;)

Inviato: mer 2 ago 2006, 12:13
da orso75
Grazie Ora provo subito!!

Info: selezionando il testo potrai applicare velocemente i B

Inviato: mer 2 ago 2006, 20:47
da targzeta
orso75 ha scritto: case "$Sek" in
[0-9][0-9]*)
Con questa forma riconosce validi solo gli input formati da due numeri e da qualsiasi altra cosa.
In particolare anche 23ddd va bene solo che poi sleep si arrabbia.
Non è che sia il massimo della bellezza questo script eh.
Comunque il sueggerimento di bruno funziona, ma anche lì c'è qualcosina da ridire, la sua aggiunta rende la precedente forma un suo sottoinsieme. Ovvero, quello che è riconosciuto da [0-9][0-9]*) è, a maggior ragione riconosciuto da [0-9]*) non credi bruno?

Spina

Inviato: gio 3 ago 2006, 9:06
da bruno82
Era un esempio didattico ;)