w3resource

Bash Functions: Passing Arguments Exercises, Solutions & Explanation

1.

Greeting Function:

Write a Bash script that defines a function called greet which takes a name as an argument and prints a greeting message using that name.

Code:

#!/bin/bash

# Define the greet function
greet() {
    local name=$1
    echo "Hello, $name! Welcome!"
}

# Call the greet function with a name
greet "Pitter"

Output:

ad@DESKTOP-3KE0KU4:~$ ./test1.sh
Hello, Pitter! Welcome!

Explanation:

In the exercise above,

  • Define a function called "greet()" using the greet() { ... } syntax.
  • Inside the function:
    • Declare a local variable 'name' to store the argument passed to the function.
    • Use "echo" to print a greeting message containing the provided name.

2.

Arithmetic Functions:

Write a Bash script that defines separate functions for addition, subtraction, multiplication, and division. These functions should take two numbers as arguments and print the result of the corresponding operation.

Code:

#!/bin/bash

# Function for addition
add() {
    local num1=$1
    local num2=$2
    local sum=$((num1 + num2))
    echo "The sum of $num1 and $num2 is: $sum"
}

# Function for subtraction
subtract() {
    local num1=$1
    local num2=$2
    local difference=$((num1 - num2))
    echo "The difference between $num1 and $num2 is: $difference"
}

# Function for multiplication
multiply() {
    local num1=$1
    local num2=$2
    local product=$((num1 * num2))
    echo "The product of $num1 and $num2 is: $product"
}

# Function for division
divide() {
    local num1=$1
    local num2=$2

    if [ $num2 -eq 0 ]; then
        echo "Error: Division by zero"
        exit 1
    fi

    local result=$(bc <<< "scale=2; $num1 / $num2")
    echo "The division of $num1 by $num2 is: $result"
}

# Test the functions
add 25 30
subtract 12 14
multiply 4 7
divide 12 5

Output:

ad@DESKTOP-3KE0KU4:~$ ./test1.sh
The sum of 25 and 30 is: 55
The difference between 12 and 14 is: -2
The product of 4 and 7 is: 28
The division of 12 by 5 is: 2.40

Explanation:

In the exercise above,

  • Define four functions: "add()", "subtract()", "multiply()", and "divide()".
  • Each function takes two numbers as arguments and performs the corresponding operation.
  • For addition, subtraction, and multiplication, we simply perform the operation using arithmetic expansion ($((...))) and print the result.
  • For division, we use "bc" command-line calculator to perform floating-point division with two decimal places (scale=2). We also handle division by zero error.

3.

Factorial Function:

Write a Bash script that defines a function called factorial which calculates and prints the factorial of a given number.

Code:

#!/bin/bash

# Define the factorial function
factorial() {
    local num=$1
    local result=1

    # Check if num is negative
    if [ $num -lt 0 ]; then
        echo "Error: Factorial is not defined for negative numbers"
        exit 1
    fi

    # Calculate factorial
    for ((i = 1; i <= num; i++)); do
        result=$((result * i))
    done

    echo "The factorial of $num is: $result"
}

# Test the factorial function with a number
factorial 6
factorial 11

Output:

ad@DESKTOP-3KE0KU4:~$ ./test1.sh
./test1.sh: line 1: l: command not found
The factorial of 6 is: 720
The factorial of 11 is: 39916800

Explanation:

In the exercise above,

  • Define a function called "factorial()" using the factorial() { ... } syntax.
  • Inside the function:
    • Declare a local variable 'num' to store the argument passed to the function.
    • Declare another local variable 'result' and initialize it to 1.
    • Check if 'num' is negative. If it is, we print an error message and exit the script.
    • Next we calculate the factorial of 'num' using a loop and store the result in the 'result' variable.

4.

Maximum and Minimum Functions:

Write a Bash script that defines functions called maximum and minimum which take two numbers as arguments and print the maximum and minimum of the two, respectively.

Code:

#!/bin/bash

# Function to find maximum of two numbers
maximum() {
    local num1=$1
    local num2=$2

    if [ $num1 -gt $num2 ]; then
        echo "The maximum of $num1 and $num2 is: $num1"
    else
        echo "The maximum of $num1 and $num2 is: $num2"
    fi
}

# Function to find minimum of two numbers
minimum() {
    local num1=$1
    local num2=$2

    if [ $num1 -lt $num2 ]; then
        echo "The minimum of $num1 and $num2 is: $num1"
    else
        echo "The minimum of $num1 and $num2 is: $num2"
    fi
}

# Test the maximum and minimum functions
maximum 200 150
minimum 12 11

Output:

ad@DESKTOP-3KE0KU4:~$ ./test1.sh
The maximum of 200 and 150 is: 200
The minimum of 12 and 11 is: 11

Explanation:

In the exercise above,

  • Define two functions: "maximum()" and "minimum()".
  • Each function takes two numbers as arguments and compares them.
  • For "maximum()", if the first number is greater than the second, it prints the first number as the maximum; otherwise, it prints the second number as the maximum.
  • For "minimum()", if the first number is less than the second, it prints the first number as the minimum; otherwise, it prints the second number as the minimum.

5.

Power Function:

Write a Bash script that defines a function called power which takes two numbers as arguments and prints the result of raising the first number to the power of the second number.

Code:

#!/bin/bash

# Define the power function
power() {
    local base=$1
    local exponent=$2
    local result=$((base ** exponent))
    echo "The result of $base raised to the power of $exponent is: $result"
}

# Test the power function with two numbers
power 2 3
power 10 2

Output:

ad@DESKTOP-3KE0KU4:~$ ./test1.sh
The result of 2 raised to the power of 3 is: 8
The result of 10 raised to the power of 2 is: 100

Explanation:

In the exercise above,

  • Define a function called "power()" using the power() { ... } syntax.
  • Inside the function:
    • Declare local variables 'base' and 'exponent' to store the arguments passed to the function.
    • Calculate the result of raising 'base' to the power of 'exponent' using the ** operator.
    • Finally, "echo" command is used to print a message showing the result.

6.

From Wikipedia, the free encyclopedia
A twin prime is a prime number that is either 2 less or 2 more than another prime number-for example, either member of the twin prime pair (17, 19) or (41, 43). In other words, a twin prime is a prime that has a prime gap of two. Sometimes the term twin prime is used for a pair of twin primes; an alternative name for this is prime twin or prime pair.

Twin Prime Check Function:

Write a Bash script that defines a function called is_twin_prime which checks if two given numbers are twin prime or not and prints the result.

Code:

#!/bin/bash

# Define the is_prime function
is_prime() {
    local num=$1

    # Check if num is less than 2
    if [ $num -lt 2 ]; then
        return 1
    fi

    # Check if num is divisible by any number from 2 to sqrt(num)
    for ((i = 2; i * i <= num; i++)); do
        if [ $((num % i)) -eq 0 ]; then
            return 1
        fi
    done

    # If no divisor found, num is prime
    return 0
}

# Define the is_twin_prime function
is_twin_prime() {
    local num1=$1
    local num2=$2

    # Check if both numbers are prime and have a difference of 2
    if is_prime "$num1" && is_prime "$num2" && [ $((num2 - num1)) -eq 2 ]; then
        echo "$num1 and $num2 are twin primes"
    else
        echo "$num1 and $num2 are not twin primes"
    fi
}

# Test the is_twin_prime function with two numbers
is_twin_prime 3 5
is_twin_prime 11 13
is_twin_prime 9 11

Output:

ad@DESKTOP-3KE0KU4:~$ ./test1.sh
3 and 5 are twin primes
11 and 13 are twin primes
9 and 11 are not twin primes

Explanation:

In the exercise above,

  • Define a function called "is_prime()" to check if a number is prime.
  • Define another function called "is_twin_prime()" to check if two numbers are twin primes.
  • The "is_prime()" function checks if a number is prime by iterating from 2 to the square root of the number.
  • The "is_twin_prime()" function checks if both numbers are prime and have a difference of 2.

7.

String Manipulation Functions:

Write a Bash script that defines functions for common string manipulations such as string length, substring extraction, and string concatenation. Pass strings as arguments to these functions.

Code:

#!/bin/bash

# Function to get the length of a string
string_length() {
    local str="$1"
    echo "Length of '$str' is: ${#str}"
}

# Function to extract a substring from a string
substring_extraction() {
    local str="$1"
    local start="$2"
    local length="$3"
    local substring="${str:start:length}"
    echo "Substring from position $start with length $length in '$str' is: '$substring'"
}

# Function to concatenate two strings
string_concatenation() {
    local str1="$1"
    local str2="$2"
    local concatenated="$str1$str2"
    echo "Concatenated string of '$str1' and '$str2' is: '$concatenated'"
}

# Test the string manipulation functions
string_length "Hello, world!"
substring_extraction "Hello, world!" 4 3
string_concatenation "Bash, " "Script!"

Output:

ad@DESKTOP-3KE0KU4:~$ ./test1.sh
Length of 'Hello, world!' is: 13
Substring from position 4 with length 3 in 'Hello, world!' is: 'o, '
Concatenated string of 'Bash, ' and 'Script!' is: 'Bash, Script!' 

Explanation:

In the exercise above,

  • We define three functions: "string_length()", "substring_extraction()", and "string_concatenation()".
  • "string_length()" function calculates the length of the given string using ${#str} syntax.
  • "substring_extraction()" function extracts a substring from the given string using the ${str:start:length} syntax.
  • "string_concatenation()" function concatenates two strings using simple string concatenation.

8.

File Operations Functions:

Write a Bash script that defines functions for basic file operations like creating a file, deleting a file, and checking if a file exists. Pass file names as arguments to these functions.

Code:

#!/bin/bash

# Function to create a directory
create_directory() {
    local dirname="$1"
    mkdir -p "$dirname"
    echo "Directory '$dirname' created."
}

# Function to list files in a directory
list_files() {
    local dirname="$1"
    if [ -d "$dirname" ]; then
        echo "Files in directory '$dirname':"
        ls "$dirname"
    else
        echo "Directory '$dirname' does not exist."
    fi
}

# Function to check if a directory exists
directory_exists() {
    local dirname="$1"
    if [ -d "$dirname" ]; then
        echo "Directory '$dirname' exists."
    else
        echo "Directory '$dirname' does not exist."
    fi
}

# Test the directory functions
create_directory "workarea_dir"
directory_exists "workarea_dir"
list_files "workarea_dir"

Output:

ad@DESKTOP-3KE0KU4:~$ ./test1.sh
Directory 'workarea_dir' created.
Directory 'workarea_dir' exists.
Files in directory 'workarea_dir':

Explanation:

In the exercise above,

  • Define three functions: "create_directory()", "list_files()", and "directory_exists()".
  • create_directory function creates a directory with the specified name using the mkdir -p command.
  • list_files function lists files in a directory if it exists, using the "ls" command.
  • directory_exists function checks if a directory exists using the -d test operator.
  • We test these functions by creating a directory, checking if it exists, and listing files in it.

Bash Editor:


More to Come !

Do not submit any solution of the above exercises at here, if you want to contribute go to the appropriate exercise page.



Become a Patron!

Follow us on Facebook and Twitter for latest update.

It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.

https://www.w3resource.com/bash-script-exercises/passing-agruments-to-functions.php