Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[SCRIPT - OT] Leggere info da file di testo "multicolon
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

Goto page 1, 2  Next  
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian)
View previous topic :: View next topic  
Author Message
berus
Guru
Guru


Joined: 28 Dec 2003
Posts: 347
Location: Italy

PostPosted: Wed Mar 16, 2005 3:39 pm    Post subject: [SCRIPT - OT] Leggere info da file di testo "multicolon Reply with quote

Ciao. Qualcuno riesce a crearmi uno scriptino bash (in realtà mi servirebbe csh ... poi cercherò di modificarlo) che legga un file così composto:
Code:
macchina directory utente password qualcosa1 qualcosa2
macchina directory,directory1,directory6 utente password qualcosa1 qualcosa2
oppure (dipende cosa risulta più facile)
Code:
macchina,directory,utente,password,qualcosa1,qualcosa2
macchina,directory|directory1|directory6,utente,password, qualcosa1,qualcosa2
e permetta di utilizzare le variabili in un comando tipo
Code:
/opt/samba/bin/smbtar -v -s $macchina -x $directory -u $utente -p $password -t $qualcosa1


Capito 8O ? Grazie
Back to top
View user's profile Send private message
xchris
Advocate
Advocate


Joined: 10 Jul 2003
Posts: 2824

PostPosted: Wed Mar 16, 2005 4:04 pm    Post subject: Reply with quote

capito :)

ci sono diversi modi...

1 - sed/awk
2 - cut

ti illustro il secondo che e' + semplice a mio avviso
Code:

cat file | cut -d" " -f1

-f2
-f3
....

ciao
_________________
while True:Gentoo()
Back to top
View user's profile Send private message
fedeliallalinea
Administrator
Administrator


Joined: 08 Mar 2003
Posts: 30967
Location: here

PostPosted: Wed Mar 16, 2005 4:05 pm    Post subject: Reply with quote

Script
Code:
#!/bin/sh
STRING="macchina directory,directory1,directory6 utente password qualcosa1 qualcosa2"

DONE=""

while $DONE
do
  ARG=`echo $STRING | awk -F" " '{print $1}'`
  if [ -z "$ARG" ]
  then
    DONE="exit"
  else
    STRING=`echo $STRING | awk -F$ARG '{print $2}'`
    echo $ARG
  fi
done

Output
Code:
$ sh prova
macchina
directory,directory1,directory6
utente
password
qualcosa1
qualcosa2

_________________
Questions are guaranteed in life; Answers aren't.
Back to top
View user's profile Send private message
berus
Guru
Guru


Joined: 28 Dec 2003
Posts: 347
Location: Italy

PostPosted: Wed Mar 16, 2005 4:22 pm    Post subject: Reply with quote

Grazie!
Purtroppo mi serve qualcosa di complicato.. :D
Ho dimenticato di dirvi che devo anche "esplodere" la parte con le virgole (non nel caso di smbtar).

Se volessi omettere qualche "variabile" con gli spazi non posso giusto? Una cosa del tipo
Code:
macchina,directory|directory1|directory6,utente,password,qualcosa1,qualcosa2
macchina,directory|directory1|directory6,utente,,qualcosa1,qualcosa2
Non sono sicuro di dover adottare questa strada, però..
Back to top
View user's profile Send private message
fedeliallalinea
Administrator
Administrator


Joined: 08 Mar 2003
Posts: 30967
Location: here

PostPosted: Wed Mar 16, 2005 4:26 pm    Post subject: Reply with quote

berus wrote:
Ho dimenticato di dirvi che devo anche "esplodere" la parte con le virgole (non nel caso di smbtar).

In che senso quelle delle directory? Poi metti tutto quello che vorresti fare
_________________
Questions are guaranteed in life; Answers aren't.
Back to top
View user's profile Send private message
berus
Guru
Guru


Joined: 28 Dec 2003
Posts: 347
Location: Italy

PostPosted: Wed Mar 16, 2005 4:49 pm    Post subject: Reply with quote

Si esatto.. Vorrei splittare la stringa delle directory. Ma potrebbe non essere solo quella da splittare quindi credo serve un if che valuti se la stringa contiene o meno delle virgole (o pipe).

Poi.. se volessi omettere qualche parametro (ad esempio come il /etc/passwd che usa i : .. ::) devo per forza utilizzare altri caratteri per dividere i parametri... In pratica: non posso usare due spazi per dividere il primo ed il terzo parametro (escludendo il secondo), giusto?

Alla fine della fiera devo creare questo comando
Code:
/opt/samba/bin/smbtar -v -s $macchina -x $directory -u $utente -p $password -t $qualcosa1
in questo modo
Code:
/opt/samba/bin/smbtar -v $VAR1$VAR2$VAR3$VAR4$VAR5
dove gli $ARG* saranno così composti (se è valido il discorso di ARG come array)
Code:
VAR1="-s $ARG[1] "
VAR2="-x $ARG[2] "
VAR3="-u $ARG[3] "
VAR4="-p $ARG[4] "
VAR5="-t $ARG[5]"
Inoltre ci dovrebbe essere un if che valuta se $ARG[*] è vuoto ed allora crea VAR*=""

Stop :wink:
Grazie
Back to top
View user's profile Send private message
gutter
Bodhisattva
Bodhisattva


Joined: 13 Mar 2004
Posts: 7162
Location: Aarau, Aargau, Switzerland

PostPosted: Wed Mar 16, 2005 5:13 pm    Post subject: Reply with quote

Vediamo se ho capito che devi fare:

Code:

#!/bin/bash

## Parse string:
## macchina directory,directory1,directory6 utente password qualcosa1 qualcosa2

  machine=$1
  echo $machine
  # Parse directory
  OLD_IFS=$IFS ; IFS=","
  (( n = 1))
  shift
  for current in $1
    do
    eval dir$n=$current
    echo  `eval echo '$dir'$n`
    (( n++ ))
  done
 
  IFS=$OLD_IFS
  shift
  user=$1
  echo $user
  shift
  passwd=$1
  echo $passwd
 
  # Parse others
  (( n = 1 ))
  shift
 for current in $@
   do
   eval other$n=$current
   echo  `eval echo '$other'$n`
   (( n++ ))
   shift
 done 



Lancialo con:
Code:

./script.sh macchina directory,directory1,directory6 utente password qualcosa1 qualcosa2


Edit Wed Mar 16 19:01:19 CET 2005: Aggiornato con l'aiuto di xchris ;)
_________________
Registered as User #281564 and Machines #163761
Back to top
View user's profile Send private message
berus
Guru
Guru


Joined: 28 Dec 2003
Posts: 347
Location: Italy

PostPosted: Thu Mar 17, 2005 7:38 am    Post subject: Reply with quote

Ciao! Si diciamo che il risultato è quello. L'unica cosa che mi lascia un po' perplesso è: a priori con questo script devo sapere quale argomento è da "suddividere".. In realtà protrebbe essere directory come qualcosa1, qualcosa2 o altro*.
E poi devo per forza utilizzare un file con la stringa.. quindi credo di dover passare tramite cat, awk, ... :cry:
Back to top
View user's profile Send private message
gutter
Bodhisattva
Bodhisattva


Joined: 13 Mar 2004
Posts: 7162
Location: Aarau, Aargau, Switzerland

PostPosted: Thu Mar 17, 2005 8:49 am    Post subject: Reply with quote

berus wrote:
Ciao! Si diciamo che il risultato è quello. L'unica cosa che mi lascia un po' perplesso è: a priori con questo script devo sapere quale argomento è da "suddividere".. In realtà protrebbe essere directory come qualcosa1, qualcosa2 o altro*.


Qeusto script fa il parsind della stringa anche se directory è una sola mentre dopo hai qualcosa1,qualcosa2,qualcosa3. Fa qualche prova ;)

berus wrote:

E poi devo per forza utilizzare un file con la stringa.. quindi credo di dover passare tramite cat, awk, ... :cry:


Questo non mi sembra un problema ;) Basta semplicemente fare qualche modifica allo script ;) o utilizzare set per settare i parametri posizionali dello script :D
_________________
Registered as User #281564 and Machines #163761
Back to top
View user's profile Send private message
berus
Guru
Guru


Joined: 28 Dec 2003
Posts: 347
Location: Italy

PostPosted: Thu Mar 17, 2005 9:10 am    Post subject: Reply with quote

gutter wrote:
Qeusto script fa il parsind della stringa anche se directory è una sola mentre dopo hai qualcosa1,qualcosa2,qualcosa3. Fa qualche prova ;)

Code:
./script.sh macchina directory,directory1,directory6 utente password qualcosa1a,qualcosa1b qualcosa2
Code:
macchina
directory
directory1
directory6
utente
password
qualcosa1a,qualcosa1b
qualcosa2
Invece dovrei dividere anche qualcosa1*... :roll:
Per questo script posso arraggiarmi dicendo che solo $directory e $qualcosa1 possono avere più valori.. ma io l'avevo pensato con un if che controllasse la presenza o meno della virgola (o qualsiasi altro segno di separazione).
gutter wrote:
Questo non mi sembra un problema ;) Basta semplicemente fare qualche modifica allo script ;) o utilizzare set per settare i parametri posizionali dello script :D
Adesso cerco di leggermi un po' di man.. però mi fai un esempio veloce per il set? Grazie
Back to top
View user's profile Send private message
gutter
Bodhisattva
Bodhisattva


Joined: 13 Mar 2004
Posts: 7162
Location: Aarau, Aargau, Switzerland

PostPosted: Thu Mar 17, 2005 9:14 am    Post subject: Reply with quote

Scusami ma forse nonho capito io: alla fine mi stai diceno che è possibile che i campi che abbiano le virgole siano più di uno e non si sa dove???
_________________
Registered as User #281564 and Machines #163761
Back to top
View user's profile Send private message
berus
Guru
Guru


Joined: 28 Dec 2003
Posts: 347
Location: Italy

PostPosted: Thu Mar 17, 2005 9:24 am    Post subject: Reply with quote

Si :roll: .. (non solo per questo script)
No :wink: .. (se facciamo riferimento solo a questo script per il smbtar)

Però a pensarci bene mi sto complicando la vita per niente. In fondo devo sapere quali e quanti parametri DEVO passare. Io non ho chiesto niente.. :oops:

Diciamo che provo a preparare tutto lo script e magari poi mi aiutate a correggerlo e migliorarlo.. vero? Ciauuuu


Last edited by berus on Thu Mar 17, 2005 9:27 am; edited 1 time in total
Back to top
View user's profile Send private message
gutter
Bodhisattva
Bodhisattva


Joined: 13 Mar 2004
Posts: 7162
Location: Aarau, Aargau, Switzerland

PostPosted: Thu Mar 17, 2005 9:27 am    Post subject: Reply with quote

Non è difficile realizzare una cosa del genere basta mettere qualche if e dentro gli if i for che ho scritto devi fare solo delle piccole nodifiche ;).

Se hai bisogno di aiuto fammi sapere :)
_________________
Registered as User #281564 and Machines #163761
Back to top
View user's profile Send private message
berus
Guru
Guru


Joined: 28 Dec 2003
Posts: 347
Location: Italy

PostPosted: Thu Mar 17, 2005 3:35 pm    Post subject: Reply with quote

Mi sono già perso :oops:
Una cosa tipo questa è corretta?

Code:
for M in `cat ./lista-pc-smbtar`; do
echo $M
done
Non proprio visto che stampa
Code:
valore1riga1
valore1riga2
valore1riga3
valore2riga1
valore2riga2
valore2riga3
[...]
Invece mi aspetto (il file è così)
Code:
valore1riga1 valore2riga1 valore3riga1
valore1riga2 valore2riga2 valore3riga2
[...]


Vi spiego cosa devo fare in questo punto..
Code:
for $VAR (leggo il file riga per riga)
ipotizzando di usare awk su $VAR
set della var PC=$1
set della var USER=$2
set della var PASS=$3
[...]
vari controlli if e se necessario divido la var (directory...)
pingo PC
if di controllo
lancio smbtar $PC$USER$PASS$*
eventuale log

Ho provato e riprovato ma ottengo sempre dei risultati pessimi. :evil: [/b]
Back to top
View user's profile Send private message
gutter
Bodhisattva
Bodhisattva


Joined: 13 Mar 2004
Posts: 7162
Location: Aarau, Aargau, Switzerland

PostPosted: Thu Mar 17, 2005 3:44 pm    Post subject: Reply with quote

Sei riuscito a non farmi capire più che devi fare ;)

Io sono disposto ad aiutarti ma mi devi fare un esempio completo dall'inizio alla fine :D
_________________
Registered as User #281564 and Machines #163761
Back to top
View user's profile Send private message
berus
Guru
Guru


Joined: 28 Dec 2003
Posts: 347
Location: Italy

PostPosted: Thu Mar 17, 2005 4:02 pm    Post subject: Reply with quote

8)
E' che andando avanti con i lavori ho perso la retta via. Cerco di semplificare al massimo..

Obiettivo: script che girerà su SUN (in cron) che faccia il backup di alcuni pc con cartelle condivise per mezzo del comando smbtar. Il comando smbtar dovrà avere questa sintassi (+ o - .. sarà necessario anche l'opzione per escludere alcune cartelle)
Code:
smbtar -s $PC -u $USER -p $PASS -x $SHARE -t - | gzip -c > $PC.tar.gz
Il comando andrà lanciato senza opzioni.

Due file:
    script per /bin/sh
    file di "configurazione"
Il file di configurazione è così composto
Code:
pc1 utente1 pass1 dir1,dir2,dir3
pc1 utente1 pass1 dir1,dir1a,dir1b
pc2 utente2 pass2 dir2
pc3 utente3 pass3 dir3,dir3a dir_da_escludere3
[...]


Adesso spiego velocemente perchè devo scappare: leggo il file di configurazione e per ogni riga setto le variabili $PC=pc1, $USER=utente1 e così via (effettuando i controlli e le esplosioni della stringa.. nel caso delle directory ad esempio). Provo a pingare $PC se ho successo lancio il comando smbtar precedentemente composto e magari faccio un minimo di log..

Grazie
Back to top
View user's profile Send private message
gutter
Bodhisattva
Bodhisattva


Joined: 13 Mar 2004
Posts: 7162
Location: Aarau, Aargau, Switzerland

PostPosted: Thu Mar 17, 2005 10:54 pm    Post subject: Reply with quote

E mi pare che lo script si avvicini molto a quello che serve a te ;)

Non capisco dove sta il problema :D
_________________
Registered as User #281564 and Machines #163761
Back to top
View user's profile Send private message
berus
Guru
Guru


Joined: 28 Dec 2003
Posts: 347
Location: Italy

PostPosted: Fri Mar 18, 2005 7:22 am    Post subject: Reply with quote

Ad esempio come faccio a fare il parsing del famoso file di configurazione, senza dover passare gli argomenti da linea di comando? :oops:
Capisco che nel cron potrei mettere un file che a sua volta contenga l'intero comando ma preferirei avere questo file. :(
Buongiorno! :wink:
Back to top
View user's profile Send private message
fedeliallalinea
Administrator
Administrator


Joined: 08 Mar 2003
Posts: 30967
Location: here

PostPosted: Fri Mar 18, 2005 7:28 am    Post subject: Reply with quote

Le directory come vanno messe in smbtar se piu' di una? e i qualcosa come vengono messi se piu' di uno?
_________________
Questions are guaranteed in life; Answers aren't.
Back to top
View user's profile Send private message
berus
Guru
Guru


Joined: 28 Dec 2003
Posts: 347
Location: Italy

PostPosted: Fri Mar 18, 2005 7:46 am    Post subject: Reply with quote

Oops, ero convinto di poter utilizzare più share nello stesso comando. Ma non ne trovo traccia. :?: :?
Facciamo l'esempio con una e una per adesso. :roll:
Back to top
View user's profile Send private message
fedeliallalinea
Administrator
Administrator


Joined: 08 Mar 2003
Posts: 30967
Location: here

PostPosted: Fri Mar 18, 2005 7:48 am    Post subject: Reply with quote

Si ok ma per i qualcosa1,qualcosa2? Come li metti se piu' di uno?
_________________
Questions are guaranteed in life; Answers aren't.
Back to top
View user's profile Send private message
berus
Guru
Guru


Joined: 28 Dec 2003
Posts: 347
Location: Italy

PostPosted: Fri Mar 18, 2005 8:09 am    Post subject: Reply with quote

Ad esempio così (se sono le cartelle da escludere)
Code:
 -X /win95 /win98
Ed a pensarci bene forse funziona anche con le directory da backuppare.. :D
Back to top
View user's profile Send private message
gutter
Bodhisattva
Bodhisattva


Joined: 13 Mar 2004
Posts: 7162
Location: Aarau, Aargau, Switzerland

PostPosted: Fri Mar 18, 2005 8:38 am    Post subject: Reply with quote

berus wrote:
Ad esempio come faccio a fare il parsing del famoso file di configurazione, senza dover passare gli argomenti da linea di comando? :oops:


Ad esempio usando il comando read ;)
_________________
Registered as User #281564 and Machines #163761
Back to top
View user's profile Send private message
berus
Guru
Guru


Joined: 28 Dec 2003
Posts: 347
Location: Italy

PostPosted: Fri Mar 18, 2005 9:04 am    Post subject: Reply with quote

Code:
     while read pc user pass dir excl
     do     
             echo "$pc -  $user -  $pass -  $dir -  $excl"
     done < lista-pc-smbtar
Non si finisce mai d'imparare.. Questo fa al caso mio. :wink: Proviamo così.
Back to top
View user's profile Send private message
gutter
Bodhisattva
Bodhisattva


Joined: 13 Mar 2004
Posts: 7162
Location: Aarau, Aargau, Switzerland

PostPosted: Fri Mar 18, 2005 9:11 am    Post subject: Reply with quote

berus wrote:
Non si finisce mai d'imparare..


Siamo qua tutti per questo :D
_________________
Registered as User #281564 and Machines #163761
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum