Znam kilka bardzo prostych poleceń w Linuksie i próbuję napisać kilka skryptów. Napisałem funkcję, która ocenia sumę ostatnich 2 cyfr w pięciocyfrowym numerze. Funkcja powinna łączyć tę wypadkową sumę między dwie ostatnie cyfry i zwracać ją. Powodem, dla którego chcę zwrócić tę wartość, jest to, że będę używał tej wartości w innej funkcji.W bash, jak przechowywać zwracaną wartość w zmiennej?
Ex: jeśli mam 12345, wtedy moja funkcja obliczy 4 + 5 i powrócić 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
Próbuję echo i zobaczyć wynik, ale jestem coraz wyjścia, jak pokazano poniżej.
-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
Próbowałem też wydrukować wynik:
password_formula
RESULT=$?
echo $RESULT
Ale to daje jakąś nieznaną wartość:
++ RESULT=67
++ echo 67
67
Jak mogę prawidłowo przechowywać prawidłową wartość i wydrukować (do podwójne sprawdzenie) na ekranie?
Z góry dziękuję.
Użycie skrótów tutaj wydaje się nie na miejscu. Możesz zrobić: 'first = $ {last_two: 0: 1}' i 'second = $ {last_two: 1: 1}' lub 'first = $ {last_two%?}' I 'second = $ {last_two #?} ' –
Instrukcja" return "jest myląco nazwana dla osób przyzwyczajonych do języków wysokiego poziomu - lepszą nazwą może być" exit_status ". Jeśli chcesz zwrócić wynik składający się z wartości ciągu lub wartości liczbowej> 255, to musi to być wykonane przez "echo" lub inny sposób wyprowadzania na standardowe wyjście. – MikeW