Próbuję napisać skrypt basha i potrzebowałem trochę matematyki zmiennoprzecinkowej. Zasadniczo chcę zrobić coś takiego:Skrypty Bash i bc
NUM=$(echo "scale=25;$1/10" | bc)
if [ $? -ne 0 ]
then
echo bad
fi
Problem, na który napotykam, to $? dąży do utrzymania wyjścia z programu echo, a nie wywołania bc. Czy istnieje sposób, w jaki zapisuję dane wyjściowe z programu bc do zmiennej?
EDIT:
Dzięki za szybkie odpowiedzi. Oto inny sposób patrzenia na problem. Powiedzieć, że zmodyfikowany skrypt trochę tak to wygląda następująco:
#!/bin/bash
NUM=$(echo "scale=25;$1/10" | bc)
if [ $? -ne 0 ]
then
echo bad
exit
fi
echo "$NUM"
Gdy użytkownik wprowadza normalną wartość zmiennoprzecinkową, to działa dobrze:
bash script.sh 1.0
wyjściowa:
.1000000000000000000000000
Jednak gdy użytkownik wprowadzi niepoprawną wartość, skrypt nie może odzyskać:
wyjściowa:
(standard_in) 1: parse error
Co staram się zrobić, to dostać się wyjść z wdziękiem.
Pamiętaj, że pomyślne echo "NUM jest $ NUM" spowoduje nadpisanie wartości w $? z polecenia "$ (echo ... | bc)". –
tak, dzięki za poprawkę. – ghostdog74
Wyjaśniłem mój post powyżej. Dzięki za wskazówkę na awk. Jeśli nie uda mi się przekonać bc do pracy, będę musiał to sprawdzić. – LandonSchropp