#! / bin / bash exponent

1

Estou com problemas para executar o operador exponente em um script de shell

#!/bin/bash
clear

number1=8
number2=2

sum1=$(( number1 ** number2 ))

echo "8 ^ 2 =" $sum1

devolve expecting primary: " number1 ** number2 "

Eu também tentei ^ em vez de ** mas ainda não está imprimindo o resultado desejado, 8 ^ 2 retornando 64. Eu devo estar perdendo algo, eu apenas não vejo o quê.

Qualquer dica seria ótima, obrigado.

    
por snw 22.07.2016 / 14:09

2 respostas

3

Parece que você está executando o script no dash shell.

A mensagem de erro que você cita é a que dash produz quando não consegue entender o operador ** ( dash não o possui). É o mesmo erro que você recebe se tentar multiplicar algo sem nada:

$ echo $(( 2 * ))
dash: 14: arithmetic expression: expecting primary: " 2 * "

Certifique-se de executar seu script diretamente (ele tem a linha #! correta depois de tudo) ou invocando-o explicitamente com bash :

$ bash script.sh
    
por 22.07.2016 / 14:30
2

GNU bash, versão 4.1.2 (1) -release (x86_64-redhat-linux-gnu)

Isso funciona bem. Aqui está o script completo:

#!/usr/bin/env  bash
clear

number1=8
number2=2

printf 'The sum of %d and %d = %d\n' $number1 $number2 $(( number1 ** number2))

E você acabou de usar o chmod +x filename; ./filename

Se você usa outro shell, pode ser necessário apontar o interpretador e executar da maneira correta.

BTW. Perfer use o printf than echo

    
por 22.07.2016 / 14:39