Buon giorno a tutta la lista.

Ripropongo il problema di qualche settimana fa (oggetto precedente
"problema bash passaggio parametri").


Il problema fondamentalmente rimane lo stesso, ovvero non riesco a
passare correttamente dei parametri da uno script ad un'altro.

Lo script main.sh legge tramite un ciclo da un file di testo [ while
read line; do; ....; ... ; done < file.txt ], e internamente cerca di
passare $line ad un altro script [ ./montaggio.sh $line ].
All'interno di file.txt metto, per riga, una serie di valori, con
spazi, tra virgole doppie. [ "var1" "var due" "var 3" var4" ]

Il punto è che se provo a dare in pasto a montaggio.sh le variabili da
riga di comando, come da riga di file.txt, funziona tutto
correttamente e mi prende le variabili ( se chiamo da shell
./montaggio.sh "var1" "var due" "var 3" var4" li riesco a prendere
correttamente con $1, $2, etc...) , con gli spazi. Se invece cerco di
fare la stessa operazione dal main.sh, dando ./montaggio.sh $line ,
quando montaggio.sh mi prende le variabili se ne frega degli apici e
li separa agli spazi.
Ulteriore problema è che l'ultima variabile sarà una password, e
quindi potrà contenere caratteri particolari. Avrei risolto con un
"shift;shift;shift; var4=$*".


Tutto il problema l'ho in realtà risolto al momento andando a prendere
le variabili una a una dal main.sh, con awk, e ripassandole
singolarmente.


Avete qualche idea del perchè bash abbia questo comportamento? Sbaglio
qualcosa io?O_o

De seguito il codice.



Grazie mille ancora!
Federico

############################################################



main.sh
______________________
#!/bin/bash

echo ; echo
echo "Test del ciclo while: provo a passare una riga alla volta da
file.txt ad un altro script in base al \"caso\""
echo ; echo

while read riga
do
echo "La riga attuale è : $riga , controllo il tipo di backup. "
echo ; echo



        tipo_di_backup=`echo $riga | awk  '{print $1}'`

       echo $tipo_di_backup
        echo ; echo



                case $tipo_di_backup in

                        \"01\" ) echo "Richiamare ./backupNetToHd.sh $riga"
                         #  tipo_bk=`echo $riga | awk  '{print $1}'`
                         #  path=`echo $riga | awk  '{print $2}'`
                         #  var_tar=`echo $riga | awk  '{print $3}'`
                         #  user=`echo $riga | awk  '{print $4}'`
                         #  pass=`echo $riga | awk  '{print $5}'`
                         #  ./backupNetToHd.sh "$tipo_bk" "$path"
"$var_tar" "$user" "$pass"
                         #  ./backupNetToHd.sh "01"
"//192.168.1.100/Zona Comune" "xvzf" "user name" "password" ;

                           ./backupNetToHd.sh $riga
                        ;;

                        \"02\" ) echo "Tipo 02, dovei richiamare
./backupHdToHd.sh \${riga}"
                        ;;

                        * ) echo "tipo non riconosciuto. Linea= ${riga}" ;;

                esac

done < cartelle.txt


if [ "$?" -eq "1" ]
then
   echo "Terminato con errori"
else
   echo "Finito - ok"
fi


exit 0
_____________________







montaggio.sh
______________________

#!/bin/bash


echo "-------------------------------------------------------------"
echo "--------------------------------------------"

var1="$1"
var2="$2"
var3="$3"
shift; shift; shift;
var4="$*"

echo "Ho settato le variabili var1= "$var1" , var2r= "$var2" , var3=
"$var3" , var4= "$var4""
echo "---------------------------------------------"
echo "--------------------------------------------------------------"

exit 0
______________________


--
Per REVOCARE l'iscrizione alla lista, inviare un email a
debian-italian-requ...@lists.debian.org con oggetto "unsubscribe". Per
problemi inviare un email in INGLESE a listmas...@lists.debian.org

To UNSUBSCRIBE, email to debian-italian-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: 
http://lists.debian.org/aanlktimtabrjrv+y73sqytrdttu4ue69+l+xsz_g9...@mail.gmail.com

Rispondere a