LINUX.ORG.RU
ФорумAdmin

Большие числа в /bin/Bash


0

0

Друзья ! Прошу Вас подсказать мне как заставить bash работать с большими числами. Именно bash нужен. У меня на redHat 7.3. числа порядка 5000000000 bash не понимает, а это очень нужно. Как это сделать ???

anonymous

1. Заменить операционную систему на 64битную:-). Это будут не очень большие числа, но для до 20го порядка хватит.

2. Не пользоваться bash-арифметикой для этого. Написать скрипт на питоне(или на чем нибудь другом) или загнать в bc для вычислений.

DonkeyHot ★★★★★
()

man expr, man bc.

А почему имеено bash, почему нельзя вывод в математические утилиты направить?

anonymous
()
Ответ на: комментарий от anonymous

Необходимо сравнивать 2 переменные, скрипт уже написан, а как иначе я не знаю ..... [ var1 -ge var2 ] ((((((((((((

anonymous
()
Ответ на: комментарий от anonymous

Написать другой скрипт, на том языке, который умеет большие числа. В первом вместо "[ var1 -ge var2 ]" вставить вызов exit_code=`script2 $var1 $var2`. А script2 уже и будет возвращать "ge" оно или не_ge :-) причем в нужной вам форме. Останется только анализировать этот ответ и все.

P.S. Пример:
echo 3 2|perl -e '($a,$b)=split(/ /,<STDIN>);if ($a>=$b) {print "1\n"} else {print "0\n"}'

т.е. в вашем скрипте вставить:
exit_code=`echo $var1 $var2 | perl -e '($a,$b)=split(/ /,<STDIN>);if ($a>=$b) {print "1\n"} else {print "0\n"}'`

если первое число >= второго - выдаст "1", иначе - "0"

P.P.S. Уверен, можно написать проще.

spirit ★★★★★
()
Ответ на: комментарий от anonymous

специально для таких целей когда-то делал "tcmp" и "tcalc"

использование tcalc:
~/bin/tcalc '(1+2+3)*2+3+(3*5)'

использование tcmp:
if [ "`~/bin/tcmp $VAR1 $VAR2`" -lt 0 ]; then
echo "$VAR1 less than $VAR2"
fi

содержимое "~/bin/tcmp":
#!/bin/bash
perl << EOF
\$var1=$1;
\$var2=$2;
if ( \$var1>\$var2 ){ printf "1\n"; };
if ( \$var1==\$var2 ){ printf "0\n"; };
if ( \$var1<\$var2 ){ printf "-1\n"; };
EOF
#end of tcmp

содержимое "~/bin/tcmp":
#!/bin/bash
echo "scale=5; $@" | bc -l
#end of tcalc

DiMoN ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.