[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

problema bash passaggio parametri 2



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
______________________


Reply to: