Skip to main content

Raymii.org Logo (IEC resistor symbol)logo

Quis custodiet ipsos custodes?
Home | About | All pages | RSS Feed | Gopher

Bash Bits: Check if item is in array

Published: 21-09-2013 | Author: Remy van Elst | Text only version of this article


Table of Contents


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

If you like this article, consider sponsoring me by trying out a Digital OceanVPS. With this link you'll get $100 credit for 60 days). (referral link)

All Bash Bits can be found using this link

This is a simple function which helps you find out if an (non associative) arrayhas 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:

foundnot found

Now a usage example. Lets say you have a script which requires a specificversion of Ubuntu and does not work on other versions of ubuntu. You can usethis 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    fifi

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, snippets