# Method 1:

#!/bin/bash

#*******************************************************************************************

# gcd.sh: greatest common divisor uses Eclidean algorithm

# Usage : gcd.sh number1 number2

# The algorithm used to calculate the GCD between two integers is known as the Euclidean

# algorithm(Recursive method).

#*******************************************************************************************

#----------------------------------------------------------------------

# Argument check

ARGS=2

BADARGS=65

if [ $# -ne "$ARGS" ]

then

echo ; echo "Invalid Arguments"

echo "Usage: $0 first-number second-number" ; echo

exit $BADARGS

fi

# Check supplied arguments are integers are not

isnumber()

{

if [ $1 -eq $1 2> /dev/null ]

then

:

# : is a null command.This is the shell equivalent of a "NOP"(do nothing)

else

echo -e "\nYou supplied one bad argument \"$1\" is not a number"

echo -e "Usage: $0 first-number second-number\n"

exit $BADARGS

fi

}

isnumber $1

isnumber $2

# ---------------------------------------------------------------------

function Euclidean()

{

if [ $2 -eq 0 ]

then

return $1

else

Euclidean $2 $(($1%$2))

# calling function recursively

fi

}

Euclidean $1 $2

echo "gcd of $1 and $2 is $?"

# $? returns the exit status of script. This is one method to capture return value of a function

exit 0

# Method 2:

#!/bin/bash

# gcd2.sh

# Usage: gcd2.sh number1 number2

# For argument check see method 1

gcd ()

{

dividend=$1

divisor=$2

# Arbitrary assignment.

#! It doesn't matter which of the two is larger.

remainder=1

# If uninitialized variable used in loop,it results in an error message

# on the first pass through loop.

if [ $divisor -eq 0 ]

then

echo "GCD of $dividend and $divisor = $dividend"

exit 0

fi

until [ "$remainder" -eq 0 ]

do

let "remainder = $dividend % $divisor"

# Now repeat with 2 smallest numbers

dividend=$divisor .

divisor=$remainder

done

}

# Last $dividend is the gcd.

gcd $1 $2

echo; echo "GCD of $1 and $2 = $dividend"; echo

exit 0

# Method 3:

#!/bin/bash

# gcd3.sh

# Usage: gcd3.sh

# This script doesn't use command line arguments.You should to enter two numbers when asking

echo enter two numbers

read n1 n2

remainder=1

# Preserve numbers for future use

t1=$n1

t2=$n2

if [ $n2 -eq 0 ]

then

echo "GCD of $n1 and $n2 = $n1"

exit 0

fi

while [ $remainder -ne 0 ]

do

remainder=`expr $n1 % $n2`

# or use

#remainder=$((n1%n2))

n1=$n2

n2=$remainder

done

echo "GCD of $t1 , $t2 is $n1"

Thank you

ReplyDeletewow I like the recursive method. It's nice and simple

ReplyDeleteYou are limited to numbers less than 256.

ReplyDeleteYou cannot return numbers greater than 255 from a function.

Linux Training in Chennai

ReplyDeleteRHCE Training in Chennai

Best Linux Training Center in Chennai

Red Hat Training in Chennai

Best Linux Training Institute in Chennai

Red Hat Linux Trainng in Chennai

cdiweld rest tomcat junit