# Shell Scripting

Basic Commands

<div id="bkmrk-echo-%240-display-curr" style="direction: ltr; border-width: 100%;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 8.4451in;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 8.4451in;"><div style="direction: ltr;"><table border="1" cellpadding="0" cellspacing="0" style="direction: ltr; border-collapse: collapse; border: 1pt solid #A3A3A3;" summary="" title=""><tbody><tr><td style="vertical-align: top; width: 2.118in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">echo $0

</td><td style="vertical-align: top; width: 2.693in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">display current shell

</td></tr><tr><td style="vertical-align: top; width: 2.118in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">cat /etc/shells

</td><td style="vertical-align: top; width: 2.693in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">display available shells

</td></tr><tr><td style="vertical-align: top; width: 2.118in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">cat /etc/passwd

</td><td style="vertical-align: top; width: 2.7625in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">shows user's shell e.g. /bin/bash)

</td></tr><tr><td style="vertical-align: top; width: 2.118in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">chmod a+x scriptname

</td><td style="vertical-align: top; width: 2.693in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">allow execute permission for all

</td></tr><tr><td style="vertical-align: top; width: 2.118in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">./script.bash

</td><td style="vertical-align: top; width: 2.693in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">execute from current location

</td></tr><tr><td style="vertical-align: top; width: 2.1375in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">/home/userdir/script.bash

</td><td style="vertical-align: top; width: 2.6736in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">execute from absolute location

</td></tr></tbody></table>

</div></div></div></div>Script Components

<div id="bkmrk-%23%21%2Fbin%2Fbash-shell-%23-" style="direction: ltr; border-width: 100%;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 8.4451in;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 8.4451in;"><div style="direction: ltr;"><table border="1" cellpadding="0" cellspacing="0" style="direction: ltr; border-collapse: collapse; border: 1pt solid #A3A3A3;" summary="" title=""><tbody><tr><td style="vertical-align: top; width: 1.7368in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">\#!/bin/bash

</td><td style="vertical-align: top; width: .784in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">Shell

</td></tr><tr><td style="vertical-align: top; width: 1.7555in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">\# This script does X

</td><td style="vertical-align: top; width: .7645in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">Comment

</td></tr><tr><td style="vertical-align: top; width: 1.7368in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">echo/cp/grep

</td><td style="vertical-align: top; width: .784in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">Command

</td></tr><tr><td style="vertical-align: top; width: 1.7368in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">if/while/for

</td><td style="vertical-align: top; width: .8527in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">Statement

</td></tr></tbody></table>

</div></div></div></div>Basic Scripts

nano output-screen

<div id="bkmrk-%23%21%2Fbin%2Fbash-%23-made-b" style="direction: ltr; border-width: 100%;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 8.4451in;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 8.4451in;"><div style="direction: ltr;"><table border="1" cellpadding="0" cellspacing="0" style="direction: ltr; border-collapse: collapse; border: 1pt solid #A3A3A3;" summary="" title=""><tbody><tr><td style="vertical-align: top; width: 2.0256in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">\#!/bin/bash

\# made by Nicolas Sotelo

whoami

echo

pwd

echo

hostname

echo

ls -ltr

echo

</td><td style="vertical-align: top; width: .6812in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">shell

comment

command

space

</td></tr></tbody></table>

</div></div></div></div>Variables

nano variable-command

<div id="bkmrk-%23%21%2Fbin%2Fbash-a%3Dnicola" style="direction: ltr; border-width: 100%;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 8.4451in;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 8.4451in;"><div style="direction: ltr;"><table border="1" cellpadding="0" cellspacing="0" style="direction: ltr; border-collapse: collapse; border: 1pt solid #A3A3A3;" summary="" title=""><tbody><tr><td style="vertical-align: top; width: 2.2138in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">\#!/bin/bash

a=Nicolas

b=Sotelo

c="Linux Class"

echo "My first name is $a"

echo "My surname is $b"

echo "My class is $c"

</td><td style="vertical-align: top; width: 3.0562in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">  
set variable  
  
  
echo variable

</td></tr></tbody></table>

</div></div></div></div>Input / Output

<div id="bkmrk-%23%21%2Fbin%2Fbashecho-hell" style="direction: ltr; border-width: 100%;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 8.4451in;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 8.4451in;"><div style="direction: ltr;"><table border="1" cellpadding="0" cellspacing="0" style="direction: ltr; border-collapse: collapse; border: 1pt solid #A3A3A3;" summary="" title=""><tbody><tr><td style="vertical-align: top; width: 3.0694in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">\#!/bin/bash  
echo Hello, my name is Nicolas Sotelo

echo

echo What is your name?

read namevar

echo

echo Hello $namevar

echo

</td><td style="vertical-align: top; width: 3.0777in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">  
  
  
  
read sets variable to the user's input  
  
echo variable

</td></tr><tr><td style="vertical-align: top; width: 3.0694in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">\#!/bin/bash  
hnvar=`hostname`  
echo Hello, my hostname is $hnvar  
echo

echo What is your name?

read namevar

echo

echo Hello $namevar

echo

</td><td style="vertical-align: top; width: 3.0326in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">  
set variable as a `command`  
echo the output

</td></tr></tbody></table>

</div></div></div></div>If-then scripts

<div id="bkmrk-%23%21%2Fbin%2Fbashcount%3D100" style="direction: ltr; border-width: 100%;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 8.4451in;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 8.4451in;"><div style="direction: ltr;"><table border="1" cellpadding="0" cellspacing="0" style="direction: ltr; border-collapse: collapse; border: 1pt solid #A3A3A3;" summary="" title=""><tbody><tr><td style="vertical-align: top; width: 3.493in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">\#!/bin/bash  
count=100

if \[ $count -eq 100 \]

then

echo Count is 100

else

echo Count is not 100

fi

</td><td style="vertical-align: top; width: 1.3979in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">  
  
  
  
  
  
  
end if statement

</td></tr><tr><td style="vertical-align: top; width: 3.493in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">\#!/bin/bash

clear

if \[ -e /home/nsotelo/error.txt \]

then

echo "File exists"

else

echo "File does not exist"

fi

</td><td style="vertical-align: top; width: 1.3527in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;"></td></tr><tr><td style="vertical-align: top; width: 3.5118in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">\#!/bin/bash

clear

echo

echo "What is your name?"

echo

read namevar

echo

echo Hello $namevar sir

echo

echo "Do you like working in IT? (y/n)"

read Like

echo

if \[ "$Like" == "y" \]

then

echo "You are cool"

elif \[ "$Like" == "n" \]

then

echo "You should try IT, it's a good field"

echo

fi

</td><td style="vertical-align: top; width: 1.3333in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;"></td></tr></tbody></table>

</div></div></div></div>For Loops

<div id="bkmrk-runs-repeatedly-unti" style="direction: ltr; border-width: 100%;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 8.4451in;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 8.4451in;">- <span style="font-family: Consolas; font-size: 10.0pt;">Runs repeatedly until specified number of variables is met</span>

<div style="direction: ltr;"><table border="1" cellpadding="0" cellspacing="0" style="direction: ltr; border-collapse: collapse; border: 1pt solid #A3A3A3;" summary="" title=""><tbody><tr><td style="vertical-align: top; width: 4.027in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">\#!/bin/bash  
for numv in 1 2 3 4 5

do

echo "Welcome $numv times"

done

</td><td style="vertical-align: top; width: 4.3in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">assign 1 2 3 4 5 to numv  
  
repeatedly display for each of the specified variables

</td></tr><tr><td style="vertical-align: top; width: 4.027in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">\#!/bin/bash

for actionv in eat run jump play

do

echo "See Nick $actionv"

done

</td><td style="vertical-align: top; width: 4.3in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">  
assign eat run jump play to actionv  
  
repeatedly display for each of the specified variables

</td></tr><tr><td style="vertical-align: top; width: 4.027in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">\#!/bin/bash

for filev in {1..5}

do

touch $filev

done

</td><td style="vertical-align: top; width: 4.2548in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">for loop to create 5 files named 1-5

</td></tr><tr><td style="vertical-align: top; width: 4.027in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">\#!/bin/bash

for filev in {1..5}

do

rm $filev

done

</td><td style="vertical-align: top; width: 4.2548in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">for loop to delete 5 files named 1-5

</td></tr><tr><td style="vertical-align: top; width: 4.027in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">\#!/bin/bash

i=1

for day in Mon Tue Wed Thu Fri

do

echo "Weekday $((i++)): $day"

done

</td><td style="vertical-align: top; width: 4.2548in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">specify days in for loop

</td></tr><tr><td style="vertical-align: top; width: 4.0465in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">\#!/bin/bash

a=1

for username in `awk -F: '{print $1}' /etc/passwd`

do

echo "Username $((a++)) : $username"

done

</td><td style="vertical-align: top; width: 4.2354in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">list all users one by one from /etc/passwd file

</td></tr></tbody></table>

</div></div></div></div>