2013-03-04 8 views
22

Robię skrypt, który daje silnię dla wstawionej liczby, ale mam pewne problemy z mnożeniem.Mnożenie zmiennych

Uwaga: silnia dla podana jest przez: 9 = 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1

Oto mój kod:

#!/bin/bash 

echo "Insert an Integer" 

read input 

if ! [[ "$input" =~ ^[0-9]+$ ]] ; then 
    exec >&2; echo "Error: You didn't enter an integer"; exit 1 
fi 

function factorial 
{ 
while [ "$input" != 1 ]; 
do 
    result=$(($result * $input)) 
    input=$(($input-1)) 
done 
} 
factorial 
echo "The Factorial of " $input "is" $result 

utrzymuje dając mi błędów wszelkiego rodzaju technik zmierzających do mnożenia:/

Obecnie wyjście jest:

[email protected] ~/Área de Trabalho/Shell $ ./factorial.sh 
Insert an Integer 
3 
./factorial.sh: line 15: * 3: syntax error: operand expected (error token is "* 3") 
The factorial of 3 is 

Wielkie dzięki, Pozdrawiam

+1

Jakie błędy daje to? – iamnotmaynard

Odpowiedz

42

Głównym problemem jest to, że nigdy nie zainicjować result (do 1), więc:

result=$(($result * $input)) 

jest odpowiednikiem tego:

result=$((* $input)) 

co nie jest poprawne wyrażenie arytmetyczne .

+0

Wielkie dzięki chłopaki! To działało jak jeden urok, zainicjowałem wynik :) – UraniumSnake

+0

@UraniumSnake: Nie ma za co! Miło mi to słyszeć. :-) – ruakh