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
- Todas as substituições de variáveis devem ter aspas duplas: link
- A comparação aritmética para a desigualdade é feita com
[ ... -ne ... ]
.
- A saída de diagnóstico, ou seja, erros e avisos, deve passar ao erro padrão.
- Ao sair em uma condição de erro, um status de saída diferente de zero deve ser retornado ao shell de chamada.
- 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
.