PDA

View Full Version : [Bourne Shell]Valore di ritorno file comandi


MEMon
08-02-2007, 22:26
E' possibile creare un file comandi che una volta chiamato mi ritorni un valore?
Ad esempio il comando expr ARG1 + ARG2 restituisce la somma dei due argomenti, se io volessi fare un comando che mi restituisca un valore allo stesso modo come dovrei fare?

Per ora l'unico modo e mettere il valore nell'exit ma poi per ricavarlo devo leggere il valore di $? dopo che il comando è stato invocato, e non è proprio la stessa cosa...


ps. parlo di UNIX :D

vizzz
08-02-2007, 22:58
se non ho capito male basta che fai una echo del risultato

MEMon
08-02-2007, 23:12
ma l'echo me lo manda in console, io invece vorrei poter decidere cosa farne, ad esempio vorrei poter fare una cosa del genere:

variabile=`mycommandfile`

senza vedere nulla stampato in console

loris_p
08-02-2007, 23:31
per assegnare ad una variabile l'output di uno script puoi fare l'echo del risultato come suggerito ed invocarlo così:

var=$(nomescript)

precisando all'interno delle parentesi eventualmente li path dello script se non presente nel PATH..
in questo modo non verrà mandato nulla sullo standard output ossia quello che per te è la console :)

vizzz
08-02-2007, 23:51
ah ora ho capito:

VAR=`expr ARG1 + ARG2`

le ` sono essenziali

andbin
09-02-2007, 08:30
E' possibile creare un file comandi che una volta chiamato mi ritorni un valore?
Ad esempio il comando expr ARG1 + ARG2 restituisce la somma dei due argomenti, se io volessi fare un comando che mi restituisca un valore allo stesso modo come dovrei fare?Mandando sullo standard-output il risultato. (e chi vuole "catturarne" il risultato fa `cmd` o $(cmd) )

Per ora l'unico modo e mettere il valore nell'exit ma poi per ricavarlo devo leggere il valore di $? dopo che il comando è stato invocato, e non è proprio la stessa cosa...Quello è lo "status code", è un valore numerico 0, 1 ....

MEMon
09-02-2007, 09:13
Capito grazie :p
Sisi usavo l'exit perchè non sapevo come si facesse in realtà :D :fagiano:

MEMon
09-02-2007, 10:10
Un altra cosa, ora per fare un confronto fra stringhe faccio così



str="ciao"

case $str in
*ci*) echo "OK"
;;

ecc ecc) echo "NO"
;;
esac


Mi chiedevo, c'è un modo per fare un confronto con "test str1 = str2" utilizzando perà dei caratteri speciali per il match?
Tipo

test *ci* = ciao

andbin
09-02-2007, 10:59
Mi chiedevo, c'è un modo per fare un confronto con "test str1 = str2" utilizzando perà dei caratteri speciali per il match?
Tipo

test *ci* = ciaoUna cosa del tipo:
if [[ $STR == *ia* ]]; then
echo "match"
else
echo "no match"
fi(funziiona con la bash 2+, se non mi sbaglio)