PDA

View Full Version : Schell scripting


Teo@Unix
14-03-2009, 14:18
Ciao a tutti, avrei bisogno di risolvere un problemino, premetto che vengo dal C e da poco programmo con la shell Unix,

ho necessità di memorizzare in un file temporaneo la dimensione in byte di un file, utilizzo: wc -c file | sed 's/ .*//' > $var,
"sed" per eliminare il resto dell'ouput di wc, credo che però così facendo la mia variabile var non contenga un valore utilizzabile come integer, difatti dopo al momento del test tipo [ "$var" -ge 0 ], credo mi dia un errore, sto facendo una cavolata quindi?
Oppure esiste una funzione che mi ritorni la dimensione in integer? Che poi la shell non necessita di specificare i tipi come nel C giusto?
grazie.

slowped
14-03-2009, 20:19
ho necessità di memorizzare in un file temporaneo la dimensione in byte di un file, utilizzo:
wc -c file | sed 's/ .*//' > $var
al momento del test tipo [ "$var" -ge 0 ], credo mi dia un errore, sto facendo una cavolata quindi?

Credo proprio di si. L'errore sta nella redirezione dell'output. La riga di codice che hai postato scrive il numero di caratteri del file in un file il cui nome è contenuto nella variabile $var.

Per fare ciò che tu vuoi io farei così:
var=`wc -c file | sed 's/ .*//'`
In questo modo metti in $var il numero di caratteri di file; dopo di che puoi fare tutti i controlli che vuoi.

Teo@Unix
14-03-2009, 23:00
Ora pefetto. L'errore era proprio non utilizzare gli apici inversi per assegnare il valore alla variabile, grazie molte!

ecco il frammento di codice funzionante:

[.......]

if [ -e "$HOME/ACCESS_LOF_FILE/log_access" ]
then
c='tempfile'
c='wc -c $HOME/ACCESS_LOG_FILE/log_access |sed 's/ .*//''
if [ "$c" \> 100000 ]
then
c='ls $HOME/ACCESS_LOG_FILE | wc -l | sed 's/ .*//''
rename 's/log_access/log_access'.$c'/' $HOME/ACCESS_LOG_FILE/log_access
fi
fi

[.......]

Ciao e grazie ancora.
-------