2016-06-14 3 views
0

У меня есть проблемы, получая следующие (пытавшиеся несколько varians с $,(), кавычка `, и т.д ...) для работы:Bash Division и Modulus

GetAmountOfFileBlocks() 
{ 
     export DOC_BLOCKS=0 
     DOC_BLOCKS= $(`expr $DOCS_AMOUNT/$CHUNK_AMOUNT`) 
     DIVISOR=echo expr $DOCS_AMOUNT % $CHUNK_AMOUNT 
     if [ $DIVISOR -ne "0" ] 
     then 
       $DOC_BLOCKS=$DOC_BLOCKS+1; 
     fi 
} 

В отлаживать (с -x) его показывает, как что-то вроде этого:

  • экспорт DOC_BLOCKS = 0
  • DOC_BLOCKS = 0 ++ выраж 193/64
  • DOC_BLOCKS =
  • 3 ./cnv_dm_assign_files_to_chunks.sh: строка 87: 3: команда не найдена
  • делителем = эхо
  • выраж 193% 64

Мне нужно, чтобы получить число, которое будет представлять число блоков, необходимых для размещения данного делителя (в этом примере 193/64 будет означать 3 и напоминание, то есть мне нужны 4 "блоки" для моих целей.

+1

Так что это? 'bash' или' sh'? Это две разные вещи. –

+2

Пожалуйста, посмотрите: http://www.shellcheck.net/ – Cyrus

+0

@SeanBright: Я читал о различиях, и, с моей точки зрения, сегодня они по сути одно и то же для всех целей и целей. В некоторых системах sh является псевдонимом bash. – Carmageddon

ответ

3

Что-то, как это должно работать:

DOC_BLOCKS=$((DOCS_AMOUNT/CHUNK_AMOUNT)) 
REMAINDER=$((DOCS_AMOUNT % CHUNK_AMOUNT)) 

if [ "$REMAINDER" -gt "0" ] 
then 
    DOC_BLOCKS=$((DOC_BLOCKS + 1)) 
fi 
+0

Почему вы изменили на -gt 0 вместо оригинала? причина производительности? легкое чтение? – Carmageddon

+0

Индивидуальные предпочтения. Любой должен работать. –

+0

Что относительно цитат? «0» против 0, в чем разница в этом случае? – Carmageddon