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

Vorrei fare un semplice script che legge un numero da un file somma 1 e
scrive il risultato sullo stesso file e modifica il nome di un file
creandolo.
Ho scritto questa prima stesura ma non funziona.
[CODE]
#!/bin/bash
# Script per provare la lettura e la scrittura di un file
nomefiledat= /media/computer64bit/Data-Linux/tmp/script/numero.dat
#echo $nomefiledat
#numero_file= read $nomefiledat
#echo $numero_file
variabile=100
echo $variabile > $nomefiledat
nomefilenuovo=/media/computer64bit/Data-Linux/tmp/script/numero"$variabile".dat
echo $nomefilenuovo > $nomefilenuovo
 
exit 0
[/CODE]
Ciao!
 

 [/CODE]
 
-- 
Yoda
 

 
 
Ho fatto la prova con lo script:
 
[CODE]
#!/bin/bash
 
PARK='/media/computer64bit/Data-Linux/tmp/script'
ORIG='numero.dat'
 
let NUM_OLD="$(cat $PARK/$ORIG)"
let NUM_NEW="$NUM_OLD + 1"
 
DEST="numero$NUM_NEW.dat"
 
echo $NUM_NEW > $PARK/$ORIG
echo $NUM_NEW > $PARK/$DEST
 
exit 0
 
[/CODE]
 
Si voglio solo il numero aggiornato. Però escono degli errori:
 
/media/computer64bit/Data-Linux/script$ sudo ./script-numero.sh
/script-numero.sh: riga 6: let: NUM_OLD=(cat
/media/computer64bit/Data-Linux/script/numero.dat): divisione per 0 (il
token dell'errore è "media/computer64bit/Data-Linux/script/numero.dat)")
 
cat numero.dat 
1
ls
numero1.dat  numero.dat  script  script-numero.sh  script.sh
 
ripetuto il numero resta 1 il file generato è corretto, altri avvii non
generano altri file.
Volendo svincolare lo script dalla dir come sostituisco il path con quello
corrente di esecuzione?
Ciao!
 
 


PARK='
http://hidedoor.com/servlet/redirect.srv/syku/sndlsfktdpe/sqrs/p1/media/computer64bit/Data-Linux/tmp/script
'

Ecco il lo script corretto:
 
#!/bin/bash
 
PARK='/media/computer64bit/Data-Linux/script'
ORIG='numero.dat'
 
let NUM_OLD=$"(cat $PARK/$ORIG)"
let NUM_NEW=$"NUM_OLD + 1"
 
DEST="numero$NUM_NEW.dat"
 
echo $NUM_NEW > $PARK/$ORIG
echo $NUM_NEW > $PARK/$DEST
 
exit 0
 
errore generato:
udo ./script-numero.sh
/script-numero.sh: riga 6: let: NUM_OLD=(cat
/media/computer64bit/Data-Linux/script/numero.dat): divisione per 0 (il
token dell'errore è "media/computer64bit/Data-Linux/script/numero.dat)")
 
Ciao!
 


one liner
 
echo $(($(cat numero.dat)+1)) |xargs -I{} echo "echo {}>numero{}.dat; 
echo {}>numero.dat;" | sh

 corrente di esecuzione?
 
Guarda e' impossibile questo che dici degli errori, prova a
*copincollare* questo seguente (magari senza l'inutile exit 0):
 
=-=-=-=-=-=-=-=-=-=-=- TAGLIA e incolla =-=-=-=-=-=-
#!/bin/bash
 
#PARK='/media/computer64bit/Data-Linux/tmp/script'
#PARK='/tmp/script'
#PARK='.'
PARK="$(pwd)"
ORIG='numero.dat'
 
let NUM_OLD="$(cat $PARK/$ORIG)"
let NUM_NEW="$NUM_OLD + 1"
 
DEST="numero$NUM_NEW.dat"
 
echo $NUM_NEW > $PARK/$ORIG
echo $NUM_NEW > $PARK/$DEST
 
# Scommentare le righe seguenti se si vuole l'output ogni volta
#cat $PARK/$ORIG $PARK/$DEST
#ls -1 $PARK/
 
=-=-=-=-=-=-=-=-=-=-=- fine TAGLIA e incolla =-=-=-=-=-=-
 
Come vedi t'ho risposto anche a come cambiare path, io ho creato la
directory script in /tmp e l'ho testato. Se vuoi usare la medesima
directory dove metti questo eseguibile (io l'ho messo in /tmp/script)
scegliti scommentata la variabile PARK che preferisci (la terza e la
quarta sono equivalenti, ma la quarta vale anche con altre shell).
 
Ma provati anche l'unica riga di comando che t'ha postato RedWiz ciao
 
 
Postilla. Eccolo da me, l'ho chiamato pippo ed e' con pwd per PARK, e
numero.dat l'ho inizializzato con 1 (poi ho visto che va anche con 0).
 
[/tmp/script]yoda_$: ls -1
pippo
numero.dat
numero2.dat
numero3.dat
numero4.dat
numero5.dat
numero6.dat
[/tmp/script]yoda_$: cat numero.dat
7
[/tmp/script]yoda_$: cat numero?.dat
2
3
4
5
6
7
ariciao
 
-- 
Yoda
 

 let NUM_NEW=$"NUM_OLD + 1"
              ^^
 
  Non è corretto, ci sono due caratteri scambiati.  Non deve esseri altro
che un nome valido di variabile o un costrutto di sostituzione dopo il
dollaro, l'apice doppio non è un carattere valido in nessun caso.
 
 
  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.