Calculate Factorial of a Number
Here are a few sample example bash scripts to display the Fibonacci sequence based on a given input.
Time to practice your Bash scripting.
Exercise
In this Bash practice exercise, write a shell script that accepts a non-negative number and shows its factorial as output.
💡Hint: Factorial is calculated in this fashion:
N! = N x (N-1) x (N-2) x (N-3) x ... x 3 x 2 1
Remember that the factorial of 0 is 1. And you cannot have a factorial of negative numbers.
Test data
If you input 5, you should get the following (5 x 4 x 3 x 2 x 1):
120
If you input 7, you should get the following:
5040
Solution 1: Factorial bash script using recursive function
Here's a sample bash scripting for getting factorial of a given number using only a for loop.
I have added the option step for checking that non-negative numbers are not enetered.
#!/bin/bash
read -p "Enter a non-negative number: " num
if [ $num -lt 0 ]; then
echo "You entered a negative number"
exit
fi
fact=1
for (( i=1; i<=$num; i++ )); do
fact=$(($fact*$i))
done
echo "$num! is: $fact"
Solution 2: Factorial script using factorial in bash
Here's a bash shell script that uses the concept of recursion and function:
#!/bin/bash
read -p "Enter a non-negative number: " num
if [ $num -lt 0 ]; then
echo "You entered a negative number"
exit
fi
factorial () {
if [ $1 -le 1 ]; then
echo 1
else
last=$(factorial $(( $1 -1)))
echo $(( $1 * last ))
fi
}
echo -n "$num! is: "
factorial $num
-n
? It is used to stop echo from automatically adding a newline.📖 Concepts to revise
The solutions discussed here use some terms, commands and concepts and if you are not familiar with them, you should learn more about them.
📚 Further reading
If you are new to bash scripting, we have a streamlined tutorial series on Bash that you can use to learn it from scratch or use it to brush up the basics of bash shell scripting.
Creator of Linux Handbook and It's FOSS. An ardent Linux user & open source promoter. Huge fan of classic detective mysteries from Agatha Christie and Sherlock Holmes to Columbo & Ellery Queen.