Bash Bits: Check if item is in array

21-09-2013 | Remy van Elst


Table of Contents


Bash Bits are small examples, tips and tutorials for Bash (Scripts). This bash bit shows you how find out if an array has an item.

All Bash Bits can be found using this link

This is a simple function which helps you find out if an (non associative) array has an item. It allows you to call the function with just the array name, not ${arrayname[@]}. It returns 1 if the item is in the array, and 0 if it is not.

This is the function:

in_array() {
    local haystack=${1}[@]
    local needle=${2}
    for i in ${!haystack}; do
        if [[ ${i} == ${needle} ]]; then
            return 0
        fi
    done
    return 1
}

Now we can test it and see that it works:

declare -a vpsservers=("vps1" "vps2" "vps3" "vps4" "vps6");

in_array vpsservers vps3 && echo "found" || echo "not found"
in_array vpsservers vps5 && echo "found" || echo "not found"

Should return:

found
not found

Now a usage example. Lets say you have a script which requires a specific version of Ubuntu and does not work on other versions of ubuntu. You can use this to check if the version of ubuntu is supported with this function.

declare -a supported_ubuntu=("Ubuntu 10.04.1 LTS" "Ubuntu 10.04.3 LTS" "Ubuntu 10.04.4 LTS" "Ubuntu 10.10" "Ubuntu 12.04 LTS" "Ubuntu 12.04.1 LTS")

if [ -f "/etc/lsb-release" ]; then
    running_ubuntu=`awk -F "\"" '/DESCRIPTION/ { print $2 }' /etc/lsb-release`
    if in_array supported_ubuntu "${running_ubuntu}"; then
        echo "${running_ubuntu} is supported."
    else
        echo "${running_ubuntu} is not supported. Run ${0} again with the -f option to ignore this warning."
        exit 1
    fi
fi

Do note that forcing a specific version of something is not a best practice, however sometimes you are forced to.


Tags: array, bash, bash-bits, haystack, needle, shell,