Raymii.org
Quis custodiet ipsos custodes?Home | About | All pages | Cluster Status | RSS Feed
Bash Bits: Check if item is in array
Published: 21-09-2013 | Author: Remy van Elst | Text only version of this article
❗ This post is over eleven years old. It may no longer be up to date. Opinions may have changed.
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.
Recently I removed all Google Ads from this site due to their invasive tracking, as well as Google Analytics. Please, if you found this content useful, consider a small donation using any of the options below:
I'm developing an open source monitoring app called Leaf Node Monitoring, for windows, linux & android. Go check it out!
Consider sponsoring me on Github. It means the world to me if you show your appreciation and you'll help pay the server costs.
You can also sponsor me by getting a Digital Ocean VPS. With this referral link you'll get $200 credit for 60 days. Spend $25 after your credit expires and I'll get $25!
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 , snippets