Ошибка сценариев оболочки при перенаправлении вывода - PullRequest
0 голосов
/ 09 августа 2011

У меня небольшое сомнение в написании сценариев оболочки

У меня есть программа (a.out), которую я запускаю несколько раз, и она выводит определенное значение на терминал.Мне нужно написать сценарий оболочки, чтобы захватить выходные данные этой программы и добавить выходные данные.

Я написал следующий сценарий

value=0
total=0
for((i=0;i<10;j++)) 
do   
 value=`./a.out $i`
 total=`expr $total + $value`
done
echo value is $value total is $total

Здесь я запускаю a.out с аргументом, являющимсязначения я.Когда я запускаю этот скрипт, я получаю сообщение об ошибке expr: non-integer argument

Проблема здесь со значением переменной.Мой a.out выдает в качестве результата double, и мне нужно записать это число в переменную.

Я новичок в написании сценариев оболочки, может кто-нибудь, пожалуйста, помогите мне в этом.

Ответы [ 2 ]

2 голосов
/ 09 августа 2011

Большинство оболочек не могут выполнять арифметику с плавающей запятой, но вы можете вызвать bc:

add () { printf "%s + %s\n" $1 $2 | bc -l; }
total=0.0
for ((i=0; i<10; i++)); do
  total=$(add $total $(./a.out $i))
done
0 голосов
/ 09 августа 2011

Вот пара функций bash для работы с математикой с плавающей запятой: http://www.linuxjournal.com/content/floating-point-math-bash

Посмотрите на пример, было бы что-то вроде:

$tmp_total = $(float_eval "$value + $total")
$total = $tmp_total
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...