Skip to content

Creating Interactive Menus in Bash Scripts

In this guide, discover diverse examples of interactive menus in Bash scripts. From basic menus to menus with actions and validation, these examples offer insights into enhancing user experience and script functionality. Whether you're a beginner or an experienced Bash scripter, these examples provide valuable techniques for building robust and user-friendly scripts.


Basic Menu
#!/bin/bash

echo "Menu:"
echo "1. Option 1"
echo "2. Option 2"
echo "3. Option 3"
echo "4. Exit"

read -p "Enter your choice: " choice

case $choice in
    1)
        echo "You selected Option 1"
        # Code for Option 1
        ;;
    2)
        echo "You selected Option 2"
        # Code for Option 2
        ;;
    3)
        echo "You selected Option 3"
        # Code for Option 3
        ;;
    4)
        echo "Exiting..."
        exit 0
        ;;
    *)
        echo "Invalid choice"
        ;;
esac
#!/bin/bash

show_menu() {
    echo "Menu:"
    echo "1. Option 1"
    echo "2. Option 2"
    echo "3. Option 3"
    echo "4. Exit"
}

process_choice() {
    case $1 in
        1)
            echo "You selected Option 1"
            # Code for Option 1
            ;;
        2)
            echo "You selected Option 2"
            # Code for Option 2
            ;;
        3)
            echo "You selected Option 3"
            # Code for Option 3
            ;;
        4)
            echo "Exiting..."
            exit 0
            ;;
        *)
            echo "Invalid choice"
            ;;
    esac
}

while true; do
    show_menu
    read -p "Enter your choice: " choice
    process_choice $choice
done
Menu with Actions
#!/bin/bash

options=("Option 1" "Option 2" "Option 3" "Exit")
actions=("echo 'You selected Option 1'" "echo 'You selected Option 2'" "echo 'You selected Option 3'" "exit 0")

echo "Menu:"
for i in "${!options[@]}"; do
    echo "$((i+1)). ${options[i]}"
done

read -p "Enter your choice: " choice

if [[ $choice =~ ^[0-9]+$ ]] && (( choice >= 1 && choice <= ${#options[@]} )); then
    eval ${actions[choice-1]}
else
    echo "Invalid choice"
fi
Menu with Validation
#!/bin/bash

valid_choices=("1" "2" "3" "4")

# Display menu
echo "Menu:"
echo "1. Option 1"
echo "2. Option 2"
echo "3. Option 3"
echo "4

. Exit"

read -p "Enter your choice: " choice
if [[ " ${valid_choices[*]} " == *" $choice "* ]]; then
    case $choice in
        1)
            echo "You selected Option 1"
            # Code for Option 1
            ;;
        2)
            echo "You selected Option 2"
            # Code for Option 2
            ;;
        3)
            echo "You selected Option 3"
            # Code for Option 3
            ;;
        4)
            echo "Exiting..."
            exit 0
            ;;
    esac
else
    echo "Invalid choice"
fi