variabile - variabili linux




In bash, come memorizzare un valore di ritorno in una variabile? (5)

Conosco alcuni comandi di base in Linux e sto provando a scrivere alcuni script. Ho scritto una funzione che valuta la somma delle ultime 2 cifre in un numero a 5 cifre. La funzione dovrebbe concatenare questa somma risultante tra le ultime 2 cifre e restituirla. Il motivo per cui voglio restituire questo valore è perché userò questo valore nell'altra funzione.

Es: se ho 12345, la mia funzione calcolerà 4 + 5 e restituirà 495.

#!/bin/bash

set -x
echo "enter: "
        read input

function password_formula
{
        length=${#input}
        last_two=${input:length-2:length}
        first=`echo $last_two| sed -e 's/\(.\)/\1 /g'|awk '{print $2}'`
        second=`echo $last_two| sed -e 's/\(.\)/\1 /g'|awk '{print $1}'`
        let sum=$first+$second
        sum_len=${#sum}
        echo $second
        echo $sum

        if [ $sum -gt 9 ]
        then
               sum=${sum:1}
        fi

        value=$second$sum$first
        return $value
}
result=$(password_formula)
echo $result

Sto cercando di echo e vedere il risultato, ma sto ottenendo l'output come mostrato di seguito.

-bash-3.2$ ./file2.sh 
+++ password_formula
+++ echo 'enter: '
+++ read input
12385
+++ length=8
+++ last_two=85
++++ echo 85
++++ sed -e 's/\(.\)/\1 /g'
++++ awk '{print $2}'
+++ first=5
++++ echo 85
++++ sed -e 's/\(.\)/\1 /g'
++++ awk '{print $1}'
+++ second=8
+++ let sum=5+8
+++ sum_len=2
+++ echo 5
+++ echo 8
+++ echo 13
+++ '[' 13 -gt 9 ']'
+++ sum=3
+++ value=835
+++ return 835
++ result='enter: 
5
8
13'
++ echo enter: 5 8 13
enter: 5 8 13

Ho anche provato a stampare il risultato come:

password_formula
RESULT=$?
echo $RESULT

Ma questo sta dando un qualche valore sconosciuto:

++ RESULT=67
++ echo 67
67

Come posso memorizzare correttamente il valore corretto e stampare (per ricontrollare) sullo schermo?

Grazie in anticipo.


È dovuto alle dichiarazioni di echo . È possibile passare i tuoi echi alle stampe e tornare con un echo . Qui sotto funziona

#!/bin/bash

set -x
echo "enter: "
read input

function password_formula
{
        length=${#input}
        last_two=${input:length-2:length}
        first=`echo $last_two| sed -e 's/\(.\)/\1 /g'|awk '{print $2}'`
        second=`echo $last_two| sed -e 's/\(.\)/\1 /g'|awk '{print $1}'`
        let sum=$first+$second
        sum_len=${#sum}
        print $second
        print $sum

        if [ $sum -gt 9 ]
        then
           sum=${sum:1}
        fi

        value=$second$sum$first
        echo $value
}
result=$(password_formula)
echo $result

È facile che tu risponda al valore che devi restituire e quindi catturarlo come di seguito

demofunc(){
    local variable="hellow"
    echo $variable    
}

val=$(demofunc)
echo $val

Il valore di ritorno (alias codice di uscita) è un valore compreso tra 0 e 255 inclusi. È usato per indicare il successo o il fallimento, non per restituire informazioni. Qualsiasi valore al di fuori di questo intervallo verrà incapsulato.

Per restituire informazioni, come il tuo numero, usa

echo "$value"

Per stampare informazioni aggiuntive che non vuoi catturare, usa

echo "my irrelevant info" >&2 

Infine, per catturarlo, usa quello che hai fatto:

 result=$(password_formula)

In altre parole:

echo "enter: "
        read input

password_formula()
{
        length=${#input}
        last_two=${input:length-2:length}
        first=`echo $last_two| sed -e 's/\(.\)/\1 /g'|awk '{print $2}'`
        second=`echo $last_two| sed -e 's/\(.\)/\1 /g'|awk '{print $1}'`
        let sum=$first+$second
        sum_len=${#sum}
        echo $second >&2
        echo $sum >&2

        if [ $sum -gt 9 ]
        then
               sum=${sum:1}
        fi

        value=$second$sum$first
        echo $value
}
result=$(password_formula)
echo "The value is $result"

La risposta più semplice:

il codice di ritorno da una funzione può essere solo un valore compreso tra 0 e 255. Per memorizzare questo valore in una variabile devi fare come in questo esempio:

#!/bin/bash

function returnfunction {
    # example value between 0-255 to be returned 
    return 23
}

# note that the value has to be stored immediately after the function call :
returnfunction
myreturnvalue=$?

echo "myreturnvalue is "$myreturnvalue

Usa la variabile speciale bash "$?" così:

function_output=${my_function}
function_return_value=$?






bash