Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

135 -shel scripting

Download as odt, pdf, or txt
Download as odt, pdf, or txt
You are on page 1of 8

How to define variables

#!/bin/bash

# A simple variable example

greeting=Hello

name=Tux

echo $greeting $name

Arithmetic Expressions
Below are the operators supported by bash for mathematical calculations:

OPERATOR USAGE
+ addition
- subtraction
* multiplication
/ division
** exponentiatio
n
% modulus

Example:
#!/bin/bash

var=$((3+9))
echo $var

example2
#!/bin/bash
#
#
clear
echo "Please calculate"
echo
read r
echo
var=$(($r))
echo "Answer is $var"
echo

For decimal calculations, we can use bc command to get the output to a


particular number of decimal places. bc (Bash Calculator) is a command line
calculator that supports calculation up to a certain number of decimal points.
echo "scale=2;22/7" | bc

Where scale defines the number of decimal places required in the output.

How to read user input

#!/bin/bash

echo "Enter a numner"


read a

echo "Enter a numner"


read b

var=$((a+b))
echo $var

Numeric Comparison logical operators


Comparison is used to check if statements evaluate to true or false. We can
use the below shown operators to compare two statements:
OPERATION SYNTAX EXPLANATION
Equality num1 -eq num2 is num1 equal to num2
Greater than equal num1 -ge num2 is num1 greater than equal to
to num2
Greater than num1 -gt num2 is num1 greater than num2
Less than equal to num1 -le num2 is num1 less than equal to
num2
Less than num1 -lt num2 is num1 less than num2
Not Equal to num1 -ne num2 is num1 not equal to num2

Syntax:
if [ conditions ]
then
commands
fi

read x
read y

if [ $x -gt $y ]
then
echo X is greater than Y
elif [ $x -lt $y ]
then
echo X is less than Y
elif [ $x -eq $y ]
then
echo X is equal to Y
fi
Conditional Statements (Decision Making)

Conditions are expressions that evaluate to a boolean expression (true or


false). To check conditions, we can use if, if-else, if-elif-else and
nested conditionals.

The structure of conditional statements is as follows:

if...then...fi statements
if...then...else...fi statements
if..elif..else..fi
if..then..else..if..then..fi..fi.. (Nested Conditionals)

Syntax:

if [[ condition ]]
then
statement
elif [[ condition ]]; then
statement
else
do this by default
fi
To create meaningful comparisons, we can use AND -a and OR -o as well.

The below statement translates to: If a is greater than 40 and b is less


than 6.

if [ $a -gt 40 -a $b -lt 6 ]

Example: Let's find the triangle type by reading the lengths of its sides.

read a
read b
read c

if [ $a == $b -a $b == $c -a $a == $c ]
then
echo EQUILATERAL

elif [ $a == $b -o $b == $c -o $a == $c ]
then
echo ISOSCELES
else
echo SCALENE

fi

Looping and skipping


For loops allow you to execute statements a specific number of times.

Looping with numbers:


In the example below, the loop will iterate 5 times.

#!/bin/bash

for i in {1..5}
do
echo $i
done

Looping with strings:


We can loop through strings as well.

#!/bin/bash

for X in cyan magenta yellow


do
echo $X
done

While loop

While loops check for a condition and loop until the condition remains true. We need to provide a
counter statement that increments the counter to control loop execution.

In the example below, (( i += 1 )) is the counter statement that increments the value of i.

Example:

#!/bin/bash

i=1

while [[ $i -le 10 ]] ; do

echo "$i"

(( i += 1 ))

done

Reading files

Suppose we have a file sample_file.txt as shown below:


image-151

We can read the file line by line and print the output on the screen.

#!/bin/bash

LINE=1

while read -r CURRENT_LINE

do

echo "$LINE: $CURRENT_LINE"

((LINE++))

done < "sample_file.txt"

Output:

Lines with line number printed

Lines with line number printed

How to execute commands with back ticks

If you need to include the output of a complex command in your script, you can write the statement
inside back ticks.

Syntax:

var= ` commands `

Example: Suppose we want to get the output of a list of mountpoints with tmpfs in their name. We
can craft a statement like this: df -h | grep tmpfs.
To include it in the bash script, we can enclose it in back ticks.

#!/bin/bash

var=`df -h | grep tmpfs`

echo $var

Output:

image-118

How to get arguments for scripts from the command line

It is possible to give arguments to the script on execution.

$@ represents the position of the parameters, starting from one.

#!/bin/bash

for x in $@

do

echo "Entered arg is $x"

done

Run it like this:

./script arg1 arg2

image-155
How to Automate Scripts by Scheduling via cron Jobs

Cron is a job scheduling utility present in Unix like systems. You can schedule jobs to execute daily,
weekly, monthly or in a specific time of the day. Automation in Linux heavily relies on cron jobs.

Below is the syntax to schedule crons:

# Cron job example

* * * * * sh /path/to/script.sh

Here, * represents minute(s) hour(s) day(s) month(s) weekday(s), respectively.

Below are some examples of scheduling cron jobs.

SCHEDULE SCHEDULED VALUE

50*8* At 00:05 in August.

54**6 At 04:05 on Saturday.

0 22 * * 1-5 At 22:00 on every day-of-week from Monday through Friday.

You can learn about cron in detail in this blog post.

How to Check Existing Scripts in a System

Using crontab

crontab -l lists the already scheduled scripts for a particular user.

My scheduled scripts

My scheduled scripts

Using the find command

The find command helps to locate files based on certain patterns. As most of the scripts end with .sh,
we can use the find script like this:

find . -type f -name "*.sh"

Where,

. represents the current directory. You can change the path accordingly.

-type f indicates that the file type we are looking for is a text based file.

*.sh tells to match all files ending with .sh.

image-159

If you are interested to read about the find command in detail, check my

You might also like