PDA

View Full Version : [Bash] Script che legge utenti e password da un file...


petitof
17-01-2007, 13:45
Ciao a tutti!
Volevo chiedervi se avevate qualche indicazione in merito a quello che starei cercando di fare!
Ho già fatto dei tentativi però volevo chiedervi la via più corretta da seguire!

Grazie in anticipo!
:D


Esemio:



#!/bin/bash


GetPassword()
{
filename=/opt/oracle/admin/user.conf
utente=$1
echo $utente

if [ "$utente" = "$line" ]
then
password=
fi

return password
}


password=GetPassword $1




Come faccio a leggere da un file esterno e restituire il parametro?!

andbin
17-01-2007, 13:53
Volevo chiedervi se avevate qualche indicazione in merito a quello che starei cercando di fare!Cioè cosa di preciso??

petitof
17-01-2007, 13:56
Ciao!
Grazie per l'aiuto..spero di ricambiare in futuro!!

Avrei un file di testo che contiene per ogni riga:

utente1/password1
utente2/password2
.
.
.
utenten/passwordn

Ogni linea termina con un "a capo"....che comando utilizzo all'interno della mia funzione per poter leggere questo file di testo e verificare se l'utenza è quella che ho dato in input?!! :rolleyes:

loris_p
17-01-2007, 14:05
cat e read :)

petitof
17-01-2007, 14:13
E' su queste due cose che sono bloccato:


1) non conosco la sintassi del ciclo for che legga riga per riga dall'inizio alla fine del file!

2) non so come prendere la password da una variabile=utenza/password, esiste la possibilità di avere la posizione da cui partire sapende che la password parte da "/" fino alla fine della linea??

:muro:

loris_p
17-01-2007, 14:16
allora direi che una letta a questo indirizzo http://www.pluto.it/files/ildp/guide/abs/index.html può esserti molto utile :)

petitof
17-01-2007, 14:20
Intanto grazie ai motori di ricerca ho modificato il mio script in:

#!/bin/bash

GetPassword()
{
filename=/opt/oracle/admin/user.conf
utente=$1
echo $utente

for linea in `cat $filename`
do
if [ $utente = $linea ]
then
password=$linea
fi
done

return password
}

password=GetPassword $1



Ma non va chiaramente perchè non so nemmeno come restituire un parametro!!!! ....non so niente!!!!

Ora leggo il link che mi hai consigliato...grazie!!

andbin
17-01-2007, 14:25
Ecco un esempio:
...

cat filepwd.txt | { while read LINEA
do
set $LINEA
if [ "$UTENTE" = "$1" -a "$PASSWORD" = "$2" ]; then
exit 0
fi
done
exit 1; }

if [ $? = 0 ]; then
echo "Utente/Password corretti"
else
echo "Utente/Password sbagliati"
fiAll'inizio ci devono essere 2 variabili $UTENTE e $PASSWORD, ovviamente con i dati da verificare.

petitof
17-01-2007, 14:32
Ora è:

#!/bin/bash

GetPassword()
{
filename=/opt/oracle/admin/user.conf
utente=$1
echo $utente

for linea in `cat $filename`
do
if [ $utente = $linea ]
then
password=$linea
fi
done

return $password
}
GetPassword $1
password=$?
echo $password







Solo che in input dò l'utenza ed avrei l'esigenza che mi restituisse la password!
il mio problema è che script che lavorano per oracle e spesso mi capita di dover cambiare una password e di impazzire a modificarli tutti, quindi volevo centralizzare il tutto in un file di conf e utilizzare la funzione per prendermi la mia info...

:stordita:

petitof
17-01-2007, 14:35
Punto 1 smarcato!!!!!!
Per la restituzione delle stringhe o array ho bisogno di una variabile dedicata!!! (dalla guida che mi hai segnalato..)

#!/bin/bash

GetPassword()
{
filename=/opt/oracle/admin/user.conf
utente=$1
echo $utente

for linea in `cat $filename`
do
if [ $utente = $linea ]
then
PASSWORD=$linea
fi
done

return $password
}
GetPassword $1
echo $PASSWORD



Ora mi manca il punto 2, perchè al momento mi restituisce tutta la riga!!!!

andbin
17-01-2007, 14:37
Solo che in input dò l'utenza ed avrei l'esigenza che mi restituisse la password!
il mio problema è che script che lavorano per oracle e spesso mi capita di dover cambiare una password e di impazzire a modificarli tutti, quindi volevo centralizzare il tutto in un file di conf e utilizzare la funzione per prendermi la mia info...Da una funzione (o processo) puoi solo far ritornare un valore numerico, non stringhe di testo o altro.

Nella funzione dovresti fare un echo della password e poi chiamare la funzione con:

PASS=`GetPassword $1`

(Nota i back-quote)

petitof
17-01-2007, 15:05
Grazie cmq ti posto la mia funzionante!!!


#!/bin/bash

# INIZIO
# FUNZIONE CHE RESTITUISCE COME STRINGA LA PASSWORD
GetPassword()
{
filename=/opt/oracle/admin/user.conf
utente=$1
#echo " e fin qua=:"$utente

for linea in `cat $filename`
do
utentefile=${linea:0:${#utente}}
#echo " utente nel file="$utentefile
if [ $utente = $utentefile ]
then
PASSWORD=${linea:${#utente}+1}
fi
done

return $password
}
GetPassword $1
password=$PASSWORD
#FINE



echo $password




:D

andbin
17-01-2007, 15:33
Le variabili, nella bash, sono condivise tra il chiamante e la funzione chiamata ... a meno che la variabile venga dichiarata con il builtin local all'interno della funzione (per cui avrebbe uno scope locale). ;)

Quindi la tua $password non è definita da alcuna parte, la return non serve e stai semplicemente passando la variabile $PASSWORD tra la funzione e il chiamante. :D

petitof
19-01-2007, 16:14
Grazie!

In effetti...corro subito a levare il return!!!!