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: