Newsgroup: it.comp.os.linux.sys
Titolo: Problemone bash

Ciao a tutti
Stavo tentando di fare un piccolo script ma mi sono piantata...
Dunque vediamo.. lo scopo è di gestire in modo semplicissimo il 
carico/scarico di un piccolissimo magazzino, per ora non servirà scomodare 
MySQL o simili ma saranno sufficenti un paio di file.
Ecco dunque il lavoro fatto fin qui..
#!/bin/sh
echo "[1]Scarico" 
echo "[2]Carico"
echo "[3]Visualizza Magazzino"
read re
case $re in
1)
echo " Inserire codice"
read risposta
cat inventario |grep -v $risposta >> scarichi
./myprog
;;
2)
echo " -- Inserire Codice Articolo --"
read code
echo " -- Inserire Descrizione --"
read desc
echo ""
echo " -- Inserire Prezzo -- "
read prezzo
echo "$code:$desc:$prezzo" >> inventario
echo ""
./myprog
;;
3)
echo ""
echo " -- Merce a magazzino --"
# e qui nasce il problema.. come fare per visualizzare la merce rimanente 
ovvero il contenuto del file inventario meno il contenuto degli scarichi?
;;
esac

 Stavo tentando di fare un piccolo script ma mi sono piantata...
Guarda che lo script che stai tentando di fare non è mica banale. Alla fine 
ti troveresti con due files che contengono tutti i movimenti, ma dovresti 
poi, per ogni occorrenza di un codice prodotto, estrarre le entità di 
movimento e fare le somme; poi la differenza tra entrata e uscita.
Non dico che in bash sia irrealizzabile, ma sarebbe di una complessità 
esagerata.
Credimi, è molto meno complesso imparare ad utilizzare un DB (c'è solo 
l'imbarazzo della scelta... mysql, PGSql, InterBase6, FireBird). Tutti 
hanno un'interfaccia Sql interattiva e ti risparmi il programma in bash; se 
poi ti avventuri nello sviluppo di procedure, le operazioni diventano 
semplicissime.
Con un'arpa si può suonare, con un'aratro arare. Ma se cerchi di arare con 
l'arpa e suonare con l'aratro, rischi di non ottenere alcun risultato.
Pensa bene al mio consiglio.
-- 
Luca

 ovvero il contenuto del file inventario meno il contenuto degli scarichi?
Ci sono vari modi; il piu' stupido che mi viene in mente e' concatenare
"scarichi" e "inventario" (se ho capito bene il primo e' un sottoinsieme
del secondo), fare un sort (cosi' le linee uguali diventano adiacenti), e
poi con uniq -u filtrare solo le linee uniche (ossia quelle che si trovavano
solo in "inventario", poiche' le doppie si trovavano in entrambi).
Se non ho capito una mazza, non mi insultare :-)
$ cat inventario scarichi | sort | uniq -u

 ovvero il contenuto del file inventario meno il contenuto degli scarichi?
A parte l'ottimo suggerimento di usare "uniq", perche`
non aggiungi un altro campo al record, che ti dice in
che stato (rimante, scarichi, inventario, quello_che_e`)
si trova ogni elemento?
Cosi` per la ricerca ti basta grep o (g)awk, senza tanti
problemi di selezione.
bye,
-- 
  Piergiorgio Sartor

l'arpa e suonare con l'aratro, rischi di non ottenere alcun risultato.
daccordissimo con te, ma in rete avevo trovato di uno che ci aveva
fatto un assembler....
--------
Ad ogni modo, per tornare alla richiesta originale, io valuterei di
interfacciare il db (o anche solo gli eventuali file ascii di
magazzino, se proprio non vuoi usare un db)  con un linguaggio un po
piu strutturato della bash, magari il pyton o
il ruby, oppure pascal.
Linux ne offre tanti e probabilemte il tempo che ci perdi a studiarlo
un attimo č inferiore al tempo che impiegeresti a realizzare il tutto
in bash, soprattutto se consideri anche le eventuali manutenzioni del
codice.
Il discorso č diverso se lo fai per studiarti la bash

 esac
se le righe dei due file sono identiche 
grep -v -f scarichi inventario
se invece devi fare qualcosa di più complesso, ti conviene usare awk o, 
meglio, perl.
In generale, è meglio il consiglio che ti hanno già dato:
usa un DB! 
Adesso, puoi anhe cavartela così. Se vorrai
ampliare l'applicazione con bash diverrebbe impraticabile
e dovresti buttare tutto.
ciao, andrea

 esac
diff ?
-- 
#eno


I'm not prejudiced, I hate everyone equally.