Scripts are text files with list of commands that need to be executed.
Usually such files are named '.sh' (instead of '.txt').

Each script must begin with:
#!/bin/bash
This tells linux which shell must be used when executing commands (usually bash).

Example 1:
#!/bin/bash
echo Hello from Bash World

Example 2:
#!/bin/bash
echo I will create a backup of my files
tar -cZf /home/backupFiles/my-backup.tgz /home/me/


In scripts you can also use variables. Create a variable with custom name and 
assign a value to it.
Call that variable value with '$' and its name.
If you are reffering to a value which is a result of some other command use $(command). 
First the command in brackets is executed and its return value is used. Eg. $(ls).

Example 3:
#!/bin/bash
STR1="Hello again!"
echo $STR1
STR2="The time is"
echo $STR2 $(date)
STR3="The contents of your diractory:"
echo $STR3
echo $(ls)


Creating conditionals.

Example 4:
#!/bin/bash
if [ 2 = 2 ]; then                 notice white spaces between ALL characters!!
   echo two equals two
fi

Example 5:
#!/bin/bash
if [ 2 = 1 ]; then
   echo two equals two
else
   echo two is not equal to one
fi


Loops.
The use of loops is little different than in other programming languages.
for is usually used to iterate over string of words
while executes until the control expression no more equals true
until executes until the control expression is false (similar to while)

Example 6:
#!/bin/bash
for i in $(ls); do
   echo item: $i
done


Example 7:
#!/bin/bash
COUNTER=0
while [ $COUNTER -lt 10 ]; do                  lt=less then
   echo The counter is $COUNTER
   let COUNTER=COUNTER+1
done


Example 8:
#!/bin/bash
COUNTER=20
until [ $COUNTER -lt 10 ]; do
   echo The counter is $COUNTER
   let COUNTER-=1
done



Functions.
Declare a function as: func_name { the code } and then just call its name.

Example 9:
#!/bin/bash
function sayHello {
   echo Hello!
}
function displayDate {
   echo $(date)
}
sayHello
displayDate


Create a function with parameters

Example 10:
#!/bin/bash
function askQuestion {
   echo What is this:
}
function e {
   echo $1
}
askQuestion
e olleH
e dlroW



User interfaces.
Using 'select' to make simple menus.

Example 11:
#!/bin/bash
OPTIONS="Hello Quit"
select opt in $OPTIONS; do
   if [ "$opt" = "Quit" ]; then
      echo done
      exit
   elif [ "$opt" = "Hello" ]; then
      echo Hello world
   else
      clear
      echo Bad option
   fi
done



Using command line.
This example expects a parameter (directory name) from command line and creates an 
archive of that directory. Execute this script as:
./testScript myDirectory

Example 12:
#!/bin/bash
if [ -z "$1" ]; then
   echo usage: $0 directory
   exit
fi
SRCDIR=$1
TGTDIR="/Users/matjaz/"
OF=home-$(date +%Y%m%d).tgz
tar -cZf $TGTDIR$OF $SRCDIR



Reading user input with read.
Read method can accept more than one parameter.

Example 13:
#!/bin/bash
echo Enter your name:
read NAME
echo "Hi $NAME!"
echo Enter your firstname and lastname
read FIRST LAST
echo "My name is $LAST. $FIRST $LAST."



Arithmetic evaluation.
Bash shell is calculating fractions with integers. Thats why 3/4 produces an output 0.
You can pipe 3/4 to the bc calculator which evaluates the expression before displaying it.

Example 14:
#!/bin/bash
echo 1+1
echo $((1+1))
echo $[1+2]
echo $[3/4]
echo 3/4|bc -l



Getting the return value from the script.
In bash the return value is stored in a special variable called $?.

Example 15:
#!/bin/bash
cd /dadada &> ./testFile.txt
echo rv: $?
cd $(pwd) &> ./testFile.txt
echo rv: $?



Following example stores path to current directory, goes to another directory, 
executes some java code and then returns back to current directory.

Example 16:
#!/bin/bash
currDir=$(pwd)
cd /Users/matjaz/knopflerfish_osgi_1.3.6/knopflerfish.org/osgi
java -jar framework.jar
#echo $currDir
cd $currDir



Check if command line arguments exist. -z operator checks if argument's size is zero.

Example 17:
#!/bin/bash
if [ -z $1 ]; then
	echo no arg
else
	echo $1
fi