Newsgroup: it.comp.os.linux.sys
Titolo: suggerimento per bash scripting

premessa: la programmazione di script bash l'ho imparata senza leggere 
nessun libro, semplicemente sbirciando gli script degli altri, quindi 
sicuramente non conosco tutto quello che si può fare con la bash.
ho il seguente problema: devo scrivere una script che, attraverso cron, 
controlla di tanto in tanto la percentuale di rimepimento dei 
filesystems, quindi, se superano la soglia dell'80%, provvede a compiere 
un'azione che non abbiamo ancora deciso (come mandare una mail a root, 
cioè a me!). ebbene, il problema che ho avuto nel realizzare la script 
bash è che usando il comando df non sono stato in grado di assegnare 
tutta una riga alla stessa viariabile: gli spazi presenti non me lo 
permettevano! per ora ho semplicemente usato sed per modificare l'output 
di df e metterci _ al posto dello spazio (in questo modo tutto funge), 
ma vorrei sapere se c'e' un modo meno artificioso di fare la stessa 
cosa. ecco lo spaccato di script incriminato:
for LINE in `df | sed -e "s/\ /_/g"`
do
         BOOLEAN=`echo $LINE | grep [8,9][0,1,2,3,4,5,6,7,8,9]%`
         if [ "$BOOLEAN" != "" ]; then
                 PART=`echo $LINE | sed -e "s/_.*//"`
                 echo "Attenzione: partizione $PART oltre il limite!"
         fi
done
-- 
konrad
A programming language is low level when its programs require attention
to the irrelevant.

 alla stessa viariabile: gli spazi presenti non me lo permettevano!
Come una stringa viene spezzata dipende dalla variabile IFS (cercala
in man bash). Di default questa e' <tab><space><newline> mentre a te
servirebbe solo <newline>. Puoi fare cosi':
OLDIFS=${IFS} # valore di default
IFS=$'\n'     # solo newline
for LINE in `df`; do
# codice qui
done
IFS=${OLDISF} # ripristina default
Per estrarre pezzi di cio' che ritorna df (o altri comandi), sono ance
utili cut, rev, tail, head.
-- 
Stefano - Hodie quinto Kalendas Septembres MMI est

 sicuramente non conosco tutto quello che si può fare con la bash.
Con awk si fa.. mi rendo conto che non e' il modo piu' pulito per
farlo ma al momento (sono ancora in ferie ufficialmente quindi il
cervello lo e' pure :-) non mi viene altro..
thorin@moria:/tmp$ export DF=`df | awk '{print $0}'`
thorin@moria:/tmp$ echo $DF
Filesystem 1k-blocks Used Available Use% Mounted on /dev/hda5 202220
30394 161386 16% / /dev/hda2 101107 2807 93079 3% /boot /dev/hda7 806368
53856 711548 7% /home /dev/hda8 608724 121132 456672 21% /var /dev/hda9
6048320 741220 4999860 13% /usr /dev/hda10 909136 432212 430740 50%
/work /dev/hda1 3615544 1805952 1809592 50% /dos
-- 
Pierluigi De Rosa (
tho...@durin.khazad-dum.net
).
<<      LINUX: the choice of a GNU generation     >>
<<   For my real address... ask the Balrog.       >>
* Sostenete la Lega per la Soppressione dei Troll *

Per memorizzare intere righe su una variabile:
df |while read variabile
do
  echo ciao $variabile
done
per assegnare ad ogni parte di riga più variabili:
df | while read var1 var2 resto
do
  echo pippo $var1
  echo pluto $var2
  echo paperino $resto
done
ciao

 writes:
SG> Per estrarre pezzi di cio' che ritorna df (o altri comandi), sono ance
SG> utili cut, rev, tail, head.
awk...
--
Gian Uberto| main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
Lauri      |                        David Korn, 1987 ioccc best one liner 
(aka saint)|-------------------------------------------------------------------
em@ail: 
sa...@eng.it
 ( vedere X-nospam nello header - see X-nospam in header )

grazie, č proprio quello che mi serviva


 /dev/hda1 3615544 1805952 1809592 50% /dos
ah, vedi anche di trovare una buona scusa per una partizione winzoz cosi`
grossa! ;-)
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

grossa! ;-)
ROTFL!
-- 
There are two major products that come out of Berkeley: LSD and UNIX.
We don't believe this to be a coincidence.  -- Jeremy S. Anderson
Maurizio - Tannoiser - Lemmo
STIGE Srl Servizi Informatici
Founder Member of ERLUG (Emilia Romagna Linux User Group)
http://erlug.linux.it