обратите внимание, что вы должны быть немного осторожнее при работе с числами с плавающей запятой, и если вы проверяете равенство, вы действительно хотите определиться с некоторой точностью, а затем сравнить, используя это. Что-то вроде:
if (abs(x1-x2) < 0.0001) then equal # pseudo-code
причина в том, что с компьютерами мы имеем дело с бинарными дробями ограниченной точности, а не с математическими данными. Ограничение точности в bc по шкале = 3 даст этот эффект.
Я бы также советовал не пытаться делать это в сценарии оболочки. Дело не в том, что вы не можете этого сделать, но вам придется отключить множество маленьких подкоманд, чтобы выполнить сложные биты, а выполнение выполняется медленно, и, как правило, писать очень сложно - вы проводите большую часть своего времени, пытаясь получить оболочку делать то, что вы хотите, а не писать код, который вы действительно хотите. Вместо этого перейдите на более сложный язык сценариев; Мой язык выбора - Perl, но есть и другие. как это ...
echo $var1 $var2 $total | perl -ne 'my ($var1, $var2, $tot) = split /\s+/; if ($var1/$tot == $var2/$tot) { print "equal\n"; }'
также обратите внимание, что вы делите на одно и то же значение ($ total в вашем вопросе), поэтому можно провести полное сравнение с числителями (var1 и var2) при условии, что $ total положительно