0% found this document useful (0 votes)
86 views71 pages

UNIX Shell-Scripting Basics

The document provides an introduction to UNIX shell scripting basics. It discusses what a shell and shell script are, including that a shell script is a text file with instructions that can be executed. It also covers the bash shell specifically and shows how to run commands, apply shell programming with logic, variables, and running programs. Examples are provided for many common shell scripting tasks like running jobs, scheduling tasks, and passing arguments to scripts.

Uploaded by

brahim
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
86 views71 pages

UNIX Shell-Scripting Basics

The document provides an introduction to UNIX shell scripting basics. It discusses what a shell and shell script are, including that a shell script is a text file with instructions that can be executed. It also covers the bash shell specifically and shows how to run commands, apply shell programming with logic, variables, and running programs. Examples are provided for many common shell scripting tasks like running jobs, scheduling tasks, and passing arguments to scripts.

Uploaded by

brahim
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 71

UNIX Shell-Scripting Basics

Agenda

 What is a shell? A shell script?


 Introduction to bash
 Running Commands
 Applied Shell Programming
What is a shell?

%▌
What is a shell?

/bin/bash
What is a shell?

#!/bin/bash
What is a shell?

INPUT

shell

OUTPUT ERROR
What is a shell?

 Any Program

Bourne Shells

 /bin/sh
 /bin/bash

Steve Bourne
Other Common Shells

 C Shell (/bin/csh)
 Turbo C Shell (/bin/tcsh)
 Korn Shell (/bin/ksh
An aside: What do I mean by /bin ?

 C Shell (/bin/csh)
 Turbo C Shell (/bin/tcsh)
 Korn Shell (/bin/ksh)
An aside: What do I mean by /bin ?
 /bin, /usr/bin, /usr/local/bin
 /sbin, /usr/sbin, /usr/local/sbin
 /tmp
 /dev

What is a Shell Script?

 A Text File
 With Instructions

What is a Shell Script?

% cat > hello.sh <<MY_PROGRAM


#!/bin/sh
echo ‘Hello, world’
MY_PROGRAM
% chmod +x hello.sh
% ./hello.sh
Hello, world
What is a Shell Script? A Text File

% cat > hello.sh <<MY_PROGRAM


#!/bin/sh
echo ‘Hello, world’
MY_PROGRAM
% chmod +x hello.sh
% ./hello.sh
Hello, world
An aside: Redirection
 cat > /tmp/myfile
 cat >> /tmp/myfile
 cat 2> /tmp/myerr INPUT 0

 cat < /tmp/myinput


env
 cat <<INPUT
Some input OUTPUT 1 ERROR 2

INPUT
 cat > /tmp/x
What is a Shell Script? How To Run

% cat > hello.sh <<MY_PROGRAM


#!/bin/sh
echo ‘Hello, world’
MY_PROGRAM
% chmod +x hello.sh
% ./hello.sh
Hello, world
What is a Shell Script? What To Do

% cat > hello.sh <<MY_PROGRAM


#!/bin/sh
echo ‘Hello, world’
MY_PROGRAM
% chmod +x hello.sh
% ./hello.sh
Hello, world
What is a Shell Script? Executable

% cat > hello.sh <<MY_PROGRAM


#!/bin/sh
echo ‘Hello, world’
MY_PROGRAM
% chmod +x hello.sh
% ./hello.sh
Hello, world
What is a Shell Script? Running it

% cat > hello.sh <<MY_PROGRAM


#!/bin/sh
echo ‘Hello, world’
MY_PROGRAM
% chmod +x hello.sh
% ./hello.sh
Hello, world
Finding the program: PATH

 % ./hello.sh
 echo vs. /usr/bin/echo
 % echo $PATH
/bin:/usr/bin:/usr/local/bin:
/home/borwicjh/bin
 % which echo
Variables and the Environment

% hello.sh
bash: hello.sh: Command not
found
% PATH=“$PATH:.”
% hello.sh
An aside: Quoting
% echo ‘$USER’
$USER
% echo “$USER”
borwicjh
% echo “\””

% echo “deacnet\\sct”
deacnet\sct
% echo ‘\”’
\”
Variables and the Environment
% env
[…variables passed to sub-programs…]
% NEW_VAR=“Yes”
% echo $NEW_VAR
Yes
% env
[…PATH but not NEW_VAR…]
% export NEW_VAR
% env
Welcome to Shell Scripting!

Input, Output, and Error


Shebang! The Environment

PATH chmod
How to Learn
 man
 man bash
 man cat
 man man
 man –k
 man –k manual
 Learning the Bash Shell, 2nd Ed.
 “Bash Reference” Cards

Introduction to bash
Continuing Lines: \
% echo This \
Is \
A \
Very \
Long \
Command Line
This Is A Very Long Command Line
Exit Status
 $?
 0 is True

% ls /does/not/exist
% echo $?
1
% echo $?
Exit Status: exit

% cat > test.sh <<_TEST_


exit 3
_TEST_
% chmod +x test.sh
% ./test.sh
% echo $?
3
Logic: test

% test 1 -lt 10
% echo $?
0
% test 1 == 10
% echo $?
Logic: test

 test
[ ]
[ 1 –lt 10 ]
 [[ ]]
[[ “this string” =~ “this” ]]
 (( ))

Logic: test
 [ -f /etc/passwd ]
 [ ! –f /etc/passwd ]
 [ -f /etc/passwd –a –f /etc/shadow ]

An aside: $(( )) for Math

% echo $(( 1 + 2 ))
3
% echo $(( 2 * 3 ))
6
% echo $(( 1 / 3 ))
Logic: if
if something
then
:
# “elif” a contraction of “else if”:
elif something-else
then
:
else
then
:
fi
Logic: if
if [ $USER –eq “borwicjh” ]
then
:
# “elif” a contraction of “else if”:
elif ls /etc/oratab
then
:
else
then
:
fi
Logic: if

# see if a file exists


if [ -e /etc/passwd ]
then
echo “/etc/passwd exists”
else
echo “/etc/passwd not found!”
fi
Logic: for

for i in 1 2 3
do
echo $i
done
Logic: for

for i in /*
do
echo “Listing $i:”
ls -l $i
read
done
Logic: for

for i in /*
do
echo “Listing $i:”
ls -l $i
read
done
Logic: for

for i in /*
do
echo “Listing $i:”
ls -l $i
read
done
Logic: C-style for

for (( expr1 ;
expr2 ;
expr3 ))
do
list
done
Logic: C-style for

LIMIT=10
for (( a=1 ;
a<=LIMIT ;
a++ ))
do
echo –n “$a ”
done
Logic: while

while something
do
:

done
Logic: while

a=0; LIMIT=10
while [ "$a" -lt "$LIMIT" ]
do
echo -n "$a ”
a=$(( a + 1 ))
done
Counters

COUNTER=0
while [ -e “$FILE.COUNTER” ]
do
COUNTER=$(( COUNTER + 1))
done


Reusing Code: “Sourcing”
% cat > /path/to/my/passwords <<_PW_
FTP_USER=“sct”
_PW_
% echo $FTP_USER

% . /path/to/my/passwords
% echo $FTP_USER
sct
Variable Manipulation
% FILEPATH=/path/to/my/output.lis
% echo $FILEPATH
/path/to/my/output.lis
% echo ${FILEPATH%.lis}
/path/to/my/output
% echo ${FILEPATH#*/}
path/to/my/output.lis
% echo ${FILEPATH##*/}
output.lis
It takes a long time to
become a bash
guru…
Running Programs
Reasons for Running Programs

 Check Return Code


$?
 Get Job Output
OUTPUT=`echo “Hello”`
OUTPUT=$(echo “Hello”)
 Send Output Somewhere
Redirection: <, >

Pipes
INPUT 0
 Lots of Little Tools
echo

OUTPUT 1 ERROR 2
echo “Hello” | \
A Pipe!

INPUT 0

wc

OUTPUT 1 ERROR 2
Email Notification

% echo “Message” | \
mail –s “Here’s your message” \
[email protected]
Dates

% DATESTRING=`date +%Y%m%d`
% echo $DATESTRING
20060125
FTP the Hard Way

ftp –n –u server.wfu.edu <<_FTP_


user username password
put FILE
FTP with wget
 wget \
ftp://user:[email protected]/file
 wget –r \
FTP with curl

curl –T upload-file \
-u username:password \
Searching: grep

% grep rayra /etc/passwd


% grep –r rayra /etc
% grep –r RAYRA /etc
% grep –ri RAYRA /etc
Searching: find

% find /home/borwicjh \
-name ‘*.lis’
[all files matching *.lis]
% find /home/borwicjh \
-mtime -1 –name ‘*.lis’
[*.lis, if modified within 24h]
Searching: locate

% locate .lis
[files with .lis in path]
% locate log
Applied Shell Programming
Make Your Life Easier

 TAB completion
 Control+R
 history
 cd -
 Study a UNIX Editor
pushd/popd
% cd /tmp
% pushd /var/log
/var/log /tmp
% cd ..
% pwd
/var
% popd
Monitoring processes

 ps
 ps –ef
 ps –u oracle
 ps –C sshd

“DOS” Mode Files

 #!/usr/bin/bash^M
 FTP transfer in ASCII, or

sqlplus
JOB=“ZZZTEST”
PARAMS=“ZZZTEST_PARAMS”
PARAMS_USER=“BORWICJH”
sqlplus $BANNER_USER/$BANNER_PW << _EOF_
set serveroutput on
set sqlprompt ""

EXECUTE WF_SATURN.FZ_Get_Parameters('$JOB',
'$PARAMS', '$PARAMS_USER');
_EOF_
sqlplus
sqlplus $USER/$PASS @$FILE_SQL \
$ARG1 $ARG2 $ARG3
if [ $? –ne 0 ]
then
exit 1
fi
if [ -e /file/sql/should/create ]
then
[…use SQL-created file…]
fi

 Ask Amy Lamy!


Passing Arguments

% cat > test.sh <<_TEST_


echo “Your name is \$1 \$2”
_TEST_
% chmod +x test.sh
% ./test.sh John Borwick ignore-
this
INB Job Submission Template
$1: user ID
$2: password
$3: one-up number
$4: process name
$5: printer name

% /path/to/your/script $UI $PW \


Scheduling Jobs

% crontab -l
0 0 * * * daily-midnight-job.sh
0 * * * * hourly-job.sh
* * * * * every-minute.sh
0 1 * * 0 1AM-on-sunday.sh
% EDITOR=vi crontab –e
% man 5
It's Over!
Other Questions?

 Shells and Shell Scripts


 bash
 Running Commands
 bash and Banner in Practice

You might also like