Sunday 25 December 2016

Array in Linux/Unix Shell Scripting

In Linux shell an Array is the collection of same or different kind of elements which are accessible using zero-based index. In shells array there is no specific data type that means while declaring a shells array no need to define the data type for array. You can store integer, float, string etc in a same array.

This post is part of the shell scripts posts. You can read more basic shell script examples on this page ( http://coolstuffsite.blogspot.in/p/shells-script.html )

In this post i will make shells array easy for you with proper examples.

Declaring a Shell Arrays
To declare a shell array use the following syntax.
declare -a array_name

where array_name is the name of array
Note: In bash, declaring array is not necessary. We can insert element individually with array index.

Declaring and Assigning values to an Array:
Method 01:
Use the following syntax to declare and assigning or initializing the values.
array_name[index]=value

where array_name is the name of array.
      index is position of element which start from zero.
      value is the array value at particular index.
     
Method 02:
You can use another method to declare bash array as following syntax.
array_name=(value1 value2 ... valuen)

This method is useful when you need to take dynamic elements . In this method you can declare space separated static array elements as well as you can place any Linux command, wild cards or SQL query .
For example if we use '*' then it will create a array of all directories and files available in current directory. I will make you understand these concept in following examples .

Accessing Bash Array Elements:
To read the array element use the following syntax.
echo ${array_name[index]}

To access all the array elements use the following syntax.
echo ${array_name[@]}
        #or
echo ${array_name[*]}

To print the number of elements of an array use the following syntax.
echo ${#array_name[@]}

Now lets start some practice with examples.

Example01 : Declaring array with method 01 and accessing array elements.
#!/bin/bash


# Declaring an array demoArray.
declare -a demoArray # It is optional


# Assigning diffrent data type elements to array demoArray
demoArray[0]='Unix'
demoArray[1]='Linux'
demoArray[2]=100
demoArray[4]=50.0
demoArray[5]='"This is demoArray script"'


# Printing third element which is an integer
echo "3rd elemets of array demoArray is : ${demoArray[2]}"
# Printing last element which is a string
echo "6th or last element of array is : ${demoArray[5]}"
# To print all the elements of the array
echo "List of all elemets : ${demoArray[@]}"


# To print the number of elements in the array
echo "Number of elements in array is : ${#demoArray[*]}"


Output:
./bashArray01.sh

3rd elemets of array demoArray is : 100
6th or last element of array is : "This is demoArray script"
List of all elemets : Unix Linux 100 50.0 "This is demoArray script"
Number of elements in array is : 5


Example02: Declaring array with method 02 and accessing array elements.
In the below example 'declare -a demoArray=(Unix Linux 100 50.0 "This is demoArray script")' and 'demoArray=(Unix Linux 100 50.0 "This is demoArray script")' represents the same array.

#!/bin/bash


# Declaring array and assigning static elements
declare -a demoArray=(Unix Linux 100 50.0 "This is demoArray script")


# Printing third element which is an integer
echo "3rd elements of array demoArray is : ${demoArray[2]}"
# Printing last element which is a string
echo "6th or last element of array is : ${demoArray[5]}"
# To print all the elements of the array
echo "List of all elements : ${demoArray[@]}"


# Declaring and initializing array current directory contents.
#declare -a currDirContent=(*)
currDirContent=(*)


# Printing all elements of current directory.
echo "-------------------------------"
echo "Current dir files are : ${currDirContent[@]}"


# Declaring lower case alphabets array
lowercase=({a..z})
# Printing a to z
echo "-------------------------------"
echo "${lowercase[@]}"
Output:
./bashArray02.sh

3rd elements of array demoArray is : 100
6th or last element of array is :
List of all elements : Unix Linux 100 50.0 This is demoArray script
-------------------------------
Current dir files are : bashArray01.sh bashArray02.sh
-------------------------------
a b c d e f g h i j k l m n o p q r s t u v w x y z



Example02: In this example we are creating an array of all emailIds which are in the customer table of a mysql database. To understand this example consider a table "customer" which having the following details.
mysql> select * from customer;
+------------+--------------+----------------------+-----------+
| customerid | customername | emailid              | accountno |
+------------+--------------+----------------------+-----------+
| 1001       | Neeraj singh | neeraj@gmail.com     |     30004 |
| 1002       | Tanu         | tanu@gmail.com       |     30005 |
| 1003       | Shivam Kumar | shivam@yahoo.com     |     30006 |
| 1004       | vinay        | vinay.s@gmail.com    |     30007 |
| 1005       | Ajay singh   | ajay.singh@gmail.com |     30008 |
+------------+--------------+----------------------+-----------+


Once we get array of above emailIds we will access the emails using a for loop.

#!/bin/bash


# Creating array of emails from database. 
declare -a EMAILIDS=(`mysql -umukesh -p*** -hlocalhost -e "SELECT emailid FROM mydb.customer"`)
# The above command will be equivalent to :
# EMAILIDS=(neeraj@gmail.com tanu@gmail.com shivam@yahoo.com vinay.s@gmail.com ajay.singh@gmail.com )


# Accessing emails using for loop
for email in "${EMAILIDS[@]}"
do
    echo "$email"
done


# Print all array of emails
echo "-----------------------------"
echo ${EMAILIDS[@]}


# Printing number of emails
echo "-----------------------------"
echo "Total emails are : ${#EMAILIDS[@]}"

Output:
./bashArray03.sh

neeraj@gmail.com
tanu@gmail.com
shivam@yahoo.com
vinay.s@gmail.com
ajay.singh@gmail.com
-----------------------------
neeraj@gmail.com tanu@gmail.com shivam@yahoo.com vinay.s@gmail.com ajay.singh@gmail.com
-----------------------------
Total emails are : 5

No comments:

Post a Comment

Related Posts Plugin for WordPress, Blogger...