2015-06-16 3 views
-4

Im возникли проблемы формулирующего следующее: Im пытается использоватьShell сценарии

echo "$var1 - $var2"|bc -l 

внутри, если заявление, как

if [$(`echo "$var1 - $var2"|bc -l`)=0] 
then 
echo "bloop" 
fi 

однако заявление возвращается с численным результатом плюсом и ошибками I попытался повторить результат перед входом в петлю, и я получаю

./script.sh: [2.00000: not found 

Любые идеи? Заранее спасибо.

+1

http://shellcheck.net/ сказал бы вам некоторые из того, что не так, прежде чем вы пришли сюда. –

+0

Пространства имеют значение для оболочки. Вы бы не писали 'echo '$ var1- $ var2" | bc-l' и ожидали, что он сработает? Вам нужны пробелы вокруг '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '[' является командой и требует определенных аргументов (последним из которых должно быть ')'. –

+0

Вам нужно пространство после '['. встроенная команда. Без пробела bash не распознает его. – Boldewyn

ответ

0

Ваша проблема здесь:

if [$(`echo "$var1 - $var2"|bc -l`)=0] 

вы должны убедиться, что у вас есть пространство betweeen в [ и ] вроде этого:

if [ $(($var1 - $var2)) -eq 0 ] 

[ это просто псевдоним для команды test , поэтому не используя пробел после того, как он заставит оболочку интерпретировать ее как команду [.

Также расчет, который вы делаете, неверен (или лучше, как вы это делаете). Простой подход будет использовать

if [ $(($var1 - $var2)) -eq 0 ] 

Отметим здесь, что вы не пишете =, вместо этого вы используете параметр -eq для равных. $(()) делает расчет для вас.

Посмотрите на страницы руководства для test команды: http://unixhelp.ed.ac.uk/CGI/man-cgi?test

+0

Вы решаете только половину проблемы. Выполнение вывода команды «bc» как команды также неверно. –

+0

Вы правы. просто подумал об очевидном. Я отредактировал сообщение соответственно! – Nidhoegger

+0

'' '' почти * просто псевдоним для 'test'. Они отличаются тем, что '' '' требует '' 'как последнего аргумента, а' test' не позволяет этого. –

0

Try:

if [ `echo "$var1 - $var2"|bc -l` -eq 0 ] 
then 
echo "bloop" 
fi 

Как пояснил @Nidhoegger в своем ответе об ошибке [ и ], имеющих место после и перед началом и закрывающие скобки.

Кроме того, некоторые ошибки в вашем был:

$(`echo "$var1 - $var2"|bc -l`) 

Вы принимали вывод как имя переменной и пытается использовать это значение $(...).

Кроме того, выполнив:

$(`echo "$var1 - $var2"|bc -l`)=0 

вы присваиваете значение вместо сравнения его.

+0

Ближе, но не работает, поскольку левая часть является переменной с плавающей запятой, так как bash выполняет только целую математику. –

+0

@CharlesDuffy, что бы вы предложили? –

+1

'[[$ (bc -l <<<" $ var1 - $ var2 ") = ~ 0 (.0+)? ]], может быть. –

Смежные вопросы