Newsgroup: it.comp.os.linux.iniziare
Titolo: Script per leggere e scri.vere una variabile in un file

Vorrei fare un semplice script che legge un numero da un file somma 1 e
scrive il risultato
 

 scrive il risultato
 
[alessandro@wrkstn05 ~]$ echo 4 > /tmp/a
[alessandro@wrkstn05 ~]$ echo $(( $(</tmp/a) + 1))
5
[alessandro@wrkstn05 ~]$
 
 
  Ciao,
 
 
-- 
Alessandro Selli 
http://alessandro.route-add.net
 
AVVERTENZA: i messaggi inviati a "trappola" non mi arriveranno.
WARNING: messages sent to "trappola" will never reach me.

 [alessandro@wrkstn05 ~]$
 
L'ho provato ma il risultato resta sempre 5.
Puoi controllare per favore?
Ciao!
 
 


  Ho copincollato dal terminale.
 
  Che shell usi?


Il 10/03/2018 alle 07:02, Xiomi ha scritto:

  Beh, l'esempio che ho scritto fa 4+1 con 4 contenuto in un file, e quindi
è ovvio che ogni volta che lo esegui fornisca 5.  Ma fa quello che hai scritto:
 
1) legge un numero da un file;
2) somma 1;
3) scrive il risultato (sullo std out).
 
  Personalizzalo a piacere per fare quello che ti serve.


   Personalizzalo a piacere per fare quello che ti serve.
 
Come faccio a scrivere il risultato sul file, non a terminale, in modo che al
successivo avvio sommi (es 5+1) e lo scriva nuovamente nel file?
Ho fatto delle prove ma non riesco a risolvere.
Grazie.
 
 

 Ho fatto delle prove ma non riesco a risolvere.
 
Nello stesso file da dove lo hai letto?
Assumendo che vi sia *solo* quel numero nel file, immagino.
 
Direi con: echo $N > file
 
D'altro canto, una soluzione possibile sarebbe:
 
copiare il file su /tmp/qualcosa
leggere dal file /tmp/qualcosa il numero
incrementare il numero
salvare il numero sul file originale *sovrascrivendolo*
cancellare, se non vi sono errori, la copia in /tmp
 
Ovviamente si puo` anche fare il contrario:
 
leggere il numero dal file
incrementare il numero
salvare il numero sul file /tmp/qualcosa
se non vi sono errori "mv /tmp/qualcosa file_originale"
controllare errori
 
Immagino vi siano anche altre combinazioni.
 
Quello che e` sicuramente da evitare e` sovrascrivere
il file originale senza averne una copia.
Si puo` fare, ma in caso di errori c'e` il rischio di
perdere tutto.
Ovviamente, si puo` anche tentare di sovrascrivere, se
non e` rilevante il problema.
 
bye,
 
-- 
 
piergiorgio

 ha scritto:

[alessandro@wrkstn05 ~]$ echo 4 > /tmp/b # Inizializzazione
[alessandro@wrkstn05 ~]$ echo $(( $(</tmp/b) + 1)) > /tmp/b
[alessandro@wrkstn05 ~]$ cat /tmp/b      # Verifica
5
[alessandro@wrkstn05 ~]$
 
  Attento che in generale redirigere l'output di un comando in un file sulla
stessa riga di comando che legge il file è un errore, perché il file è
troncato all'esecuzione della riga di comando prima della sua lettura:
 
[alessandro@wrkstn05 ~]$ wc /tmp/b > /tmp/b
[alessandro@wrkstn05 ~]$ cat /tmp/b
0 0 0 /tmp/b
[alessandro@wrkstn05 ~]$
 
  Nel caso della somma invece funziona perché il file è letto da una
sottoshell, quella che esegue la sostituzione di comando $( ... )
 
 
  Ciao,
 
 
-- 
Alessandro Selli 
http://alessandro.route-add.net
 
VOIP SIP: 
dhata...@ekiga.net
 
Chiavi PGP/GPG keys: B7FD89FD, 4A904FD9
 

 sottoshell, quella che esegue la sostituzione di comando $( ... )
 
Grazie! :)