Adição de dois números flutuantes usando o shell script

3

Eu estou tentando adicionar dois números flutuantes juntos usando o shell script. Eu tentei isso:

#!/bin/bash
if [ $# != 2 ]; then
    echo "2 arguments are required "
    exit
else
    x=$1
    y=$2
    sum = $x + $y
    echo ' sum = $sum | bc '
fi

Quando eu forneço dois argumentos para a linha de comando, por exemplo:

bash filename.sh 2.4 5

... isso me dá um erro: [ 2 != 2 ] command not found

    
por Avinash Utekar 21.04.2017 / 02:17

6 respostas

3

else
    echo -n "sum = "
    echo "$1 + $2" | bc
fi

consertará a segunda metade do problema que você ainda não conseguiu. Seu primeiro problema é um mistério. " [ " é um comando interno, portanto, a menos que haja aspas que você não esteja nos mostrando, não consigo ver como é possível usar [ $# != 2 ] como uma única palavra.

    
por 21.04.2017 / 02:39
1

Seu script:

#!/bin/bash
if [ $# != 2 ]; then
    echo "2 arguments are required "
    exit
else
    x=$1
    y=$2
    sum = $x + $y
    echo ' sum = $sum | bc '
fi
  1. Todas as substituições de variáveis devem ter aspas duplas: link
  2. A comparação aritmética para a desigualdade é feita com [ ... -ne ... ] .
  3. A saída de diagnóstico, ou seja, erros e avisos, deve passar ao erro padrão.
  4. Ao sair em uma condição de erro, um status de saída diferente de zero deve ser retornado ao shell de chamada.
  5. As atribuições não aceitam espaços em torno de = .

Com essas coisas em mente, seu código se torna

#!/bin/sh

if [ "$#" -ne 2 ]; then
    echo >&2 'Expected two arguments'
    exit 1
fi

printf 'sum = %f\n' "$( printf '%f + %f\n' "$1" "$2" | bc )"

Como alternativa, com algumas extensões bash :

#!/bin/bash

if (( $# != 2 )); then
    echo >&2 'Expected two arguments'
    exit 1
fi

printf 'sum = %f\n' "$( bc <<<"$1 + $2" )"

Com variáveis intermediárias:

#!/bin/bash

if (( $# != 2 )); then
    echo >&2 'Expected two arguments'
    exit 1
fi

x="$1"
y="$2"
sum="$( bc <<<"$x + $y" )"
printf 'sum = %f\n' "$sum"

Modifique a string de formatação printf para atender às suas necessidades. Se você, por exemplo, quiser dois decimais, use %.2f em vez de %f .

    
por 21.04.2017 / 09:11
0
#!/bin/bash

if [ $# -ne 2 ]; then
    echo "2 arguments are required"
else
    x=$1
    y=$2
    sum="$x + $y"
    echo "sum = 'bc <<< $sum'"
fi

Salvar o script em sum.sh e executá-lo fornece essa saída

./sum.sh 2.45 2.55
sum = 5.00
    
por 21.04.2017 / 03:44
0
if [ "$#" != 2 ]; then
   echo "2 arguments are required"; exit 1
else
   x=$1 y=$2
   sum="[sum=]n $x $y + 2k p"
   echo "$sum" | dc
fi

Resultado:

sum=7.4

Explicação:

We use the 'dc' calculator by placing the two operands on the stack and
adding the two top of stack elements. And prior to adding, we place a
string 'sum=' on the stack, and immediately print it which as a side effect
also removes it from the stack. The precision of the results is set to 2.
    
por 21.04.2017 / 07:48
0

Use isso para adicionar dois números flutuantes.

echo 12.8 12.2 | awk '{print $1 + $2}'

Result:- 25

Apenas substitua os números por suas variáveis.

Você pode usar

awk "BEGIN {print 12.8+12.2; exit}"

    
por 21.04.2017 / 08:21
0

Usando bc :

    #!/bin/bash
    n="$@" 
    bc <<< "${n// /+}"

Supondo que o script se chame add , funciona assim:

add 3.2 5.5
8.7
add 3.2 5.5 8.9
17.6

Observe como o script não precisa verificar dois argumentos; pode adicionar um ou mais argumentos.

    
por 22.04.2017 / 02:54