Using Bash Arrays with Examples

Arrays can be a useful tool when coding your bash scripts.  The simplest way that I can define an array is to state that an array is a variable for a multi-instance dataset.  For example, a variable is used when there is a single value from a dataset like the IP Address of a server.  However, an array can be used to store all of the IP Addresses in your server room.  Speaking of IP Addresses and bash arrays, my last article (Detect and Block WordPress Brute Force Login Attacks) includes a script which is an example of how an array can be used in bash scripting.  Because arrays can be so useful in bash scripting, I thought that I would put together the following article detailing ways of Using Bash Arrays with Examples.

Initializing Bash Arrays or Assigning Values to Arrays

For arrays to be useful, we need to be able to assign values to them.  We assign values to an array by listing the array along with its instance number as shown below.  This method will assign each instance of the array one by one.

#!/bin/bash
myarray[0]=Hello
myarray[1]=World,
myarray[3]=Happy
myarray[4]=Friday

# Display all instances of the array
echo ${myarray[*]}

We can see above that in addition to being able to assign the values one by one, we can reference all array instances with an asterisk (*).  Another way to display all instances of the array is to use the following “echo ${myarray[@]}”

We run the script and get:

$ ./arrays.sh
Hello World, Happy Friday

We can also retrieve individual instances of an array by specifying the individual array instance number.  We modify the above script slightly to retrieve a couple of the instances.

#!/bin/bash
myarray[0]=Hello
myarray[1]=World,
myarray[3]=Happy
myarray[4]=Friday

# Display all instances of the array
echo ${myarray[0]} ${myarray[4]}

We run the script again and we get:

$ ./arrays.sh
Hello Friday

 

Other Ways to Populate a Bash Array

White space is a delimiter when assigning values to an array.  This means that the example:

myarray=(Hello World)

will assign values to both instances 0 and 1 of the array “myarray” in one statement.

below, rr=(Hello World)

Populate Bash Array From Command Output

A very common method for populating a full array is by capturing the output from a bash command into the array.  Below is an example from my WordPress brute force script that I mentioned above.  The array named “IPADDRESSES” is populated

IPADDRESSES=(`/bin/grep wp-login.php ${TMPLOG} | /bin/awk '{print $1}' | sort | uniq -c | sort -rn | awk '{printf "%s:%s\n", $1, $2}'`)

 

Here are a few other things that you can do with a bash array

Show all array instance control variables for an array.

#!/bin/bash
myarray=(Hello World, happy friday)

echo ${!myarray[*]}

which when run gives us:

$ ./arrays.sh
0 1 2 3

This has uses in a loop environment perhaps as a control variable for a for loop.

Show How Many Instances There are in Your Bash Array

Sometimes you need to know how many instances there are in your bash array,

#!/bin/bash
myarray=(Hello World, happy friday)

echo ${#myarray[*]}

which when run gives us:

$ ./arrays.sh
4

The 4 above represents an instance for each word:  “Hello World, happy friday”

Display the Length of a Bash Array Instance

Sometimes you want to get the length of the text in each of your bash array instances.

#!/bin/bash
array=(Hello World, happy friday Supercalifragilisticexpialidocious )
echo ${#array[0]}
echo ${#array[1]}
echo ${#array[2]}
echo ${#array[3]}
echo ${#array[4]}

which when run looks like this:

$ ./arrays.sh
5
6
5
6
34

Each row above represents the length of the word in each bash array instance.

The following two tabs change content below.
Jeff has 20 years of professional IT experience, having done nearly everything in his roles of IT consultant, Systems Integrator, Systems Engineer, CNOC Engineer, Systems Administrator, Network Systems Administrator, and IT Director. If there is one thing he knows for sure, it is that there is always a simple answer to every IT problem and that downtime begins with complexity. Seasoned IT professional by day, Jeff hopes to help other IT professionals by blogging about his experiences at night on his blog: http://uptimemadeeasy.com. You can find Jeff on or LinkedIn at: LinkedIn or Twitter at: Twitter

Latest posts by Jeff Staten (see all)

Leave a Reply

Your email address will not be published. Required fields are marked *