echo

advertisement

UNIX Shell-Scripting Basics

www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Agenda

 What is a shell? A shell script?

 Introduction to bash

 Running Commands

 Applied Shell Programming www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

What is a shell?

www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

What is a shell?

/bin/bash

www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

What is a shell?

#!/bin/bash

www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

What is a shell?

INPUT shell

OUTPUT ERROR www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

What is a shell?

 Any Program

 But there are a few popular shells… www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Bourne Shells

 /bin/sh

 /bin/bash

“Bourne-Again Shell”

Steve Bourne www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Other Common Shells

 C Shell ( /bin/csh )

 Turbo C Shell ( /bin/tcsh )

 Korn Shell ( /bin/ksh ) www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

An aside: What do I mean by /bin ?

 C Shell ( /bin/csh )

 Turbo C Shell ( /bin/tcsh )

 Korn Shell ( /bin/ksh ) www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

An aside: What do I mean by /bin ?

 /bin, /usr/bin, /usr/local/bin

 /sbin, /usr/sbin, /usr/local/sbin

 /tmp

 /dev

 /home/borwicjh www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

What is a Shell Script?

 A Text File

 With Instructions

 Executable www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

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 www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

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 www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

An aside: Redirection

 cat > /tmp/myfile

 cat >> /tmp/myfile

 cat 2> /tmp/myerr

 cat < /tmp/myinput

 cat <<INPUT

Some input

INPUT

 cat > /tmp/x 2>&1

INPUT

0

OUTPUT

1 env

ERROR

2 www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

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 www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

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 www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

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 www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

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 www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Finding the program: PATH

 % ./hello.sh

 echo vs. /usr/bin/echo

 % echo $PATH

/bin:/usr/bin:/usr/local/bin:

/home/borwicjh/bin

 % which echo

/usr/bin/echo www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Variables and the Environment

% hello.sh

bash: hello.sh: Command not found

% PATH=“$PATH:.”

% hello.sh

Hello, world www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

An aside: Quoting

% echo ‘ $USER ’

$USER

% echo “ $USER ” borwicjh

% echo “ \” ”

% echo “deacnet \\ sct” deacnet\sct

% echo ‘ \” ’

\” www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

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

[…PATH and NEW_VAR…] www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Welcome to Shell Scripting!

www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

How to Learn

 man

 man bash

 man cat

 man man

 man –k

 man –k manual

 Learning the Bash Shell , 2 nd Ed.

 “Bash Reference” Cards

 http://www.tldp.org/LDP/abs/html/ www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Introduction to

bash www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Continuing Lines: \

% echo This \

Is \

A \

Very \

Long \

Command Line

This Is A Very Long Command Line

% www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Exit Status

 $?

 0 is True

% ls /does/not/exist

% echo $?

1

% echo $?

0 www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Exit Status: exit

% cat > test.sh <<_TEST_ exit 3

_TEST_

% chmod +x test.sh

% ./test.sh

% echo $?

3 www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Logic: test

% test 1 -lt 10

% echo $?

0

% test 1 == 10

% echo $?

1 www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Logic: test

 test

 [ ]

 [ 1 –lt 10 ]

 [[ ]]

 [[ “this string” =~ “this” ]]

 (( ))

 (( 1 < 10 )) www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Logic: test

 [ -f /etc/passwd ]

 [ ! –f /etc/passwd ]

 [ -f /etc/passwd –a –f /etc/shadow ]

 [ -f /etc/passwd –o –f /etc/shadow ] www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

An aside: $(( )) for Math

% echo $(( 1 + 2 ))

3

% echo $(( 2 * 3 ))

6

% echo $(( 1 / 3 ))

0 www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Logic: if if something then

:

# “elif” a contraction of “else if”: elif something-else then

: else then fi

: www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Logic: if if [ $USER –eq “borwicjh” ] then

:

# “elif” a contraction of “else if”: elif ls /etc/oratab then

: else then fi

: www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Logic: if

# see if a file exists if [ -e /etc/passwd ] then echo “/etc/passwd exists” else echo “/etc/passwd not found!” fi www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Logic: for for i in 1 2 3 do echo $i done www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Logic: for for i in /* do echo “Listing $i:” ls -l $i read done www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Logic: for for i in /* do echo “Listing $i:” ls -l $i read done www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Logic: for for i in /* do echo “Listing $i:” ls -l $i read done www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Logic: C-style for for (( expr1 ; expr2 ; expr3 )) do list done www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Logic: C-style for

LIMIT=10 for (( a=1 ; a<=LIMIT ; a++ )) do echo –n “$a ” done www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Logic: while while something do

: done www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Logic: while a=0; LIMIT=10 while [ "$a" -lt "$LIMIT" ] do echo -n "$a ” a=$(( a + 1 )) done www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Counters

COUNTER=0 while [ -e “$FILE.COUNTER” ] do

COUNTER=$(( COUNTER + 1)) done

 Note: race condition www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Reusing Code: “Sourcing”

% cat > /path/to/my/passwords <<_PW_

FTP_USER=“sct”

_PW_

% echo $FTP_USER

% .

/path/to/my/passwords

% echo $FTP_USER sct

% www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

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

www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

It takes a long time to become a bash guru… www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Running Programs

www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Reasons for Running Programs

 Check Return Code

 $?

 Get Job Output

 OUTPUT=`echo “Hello”`

 OUTPUT=$(echo “Hello”)

 Send Output Somewhere

 Redirection: < , >

 Pipes www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Pipes

 Lots of Little Tools echo “Hello” | \ wc -c

INPUT

0

OUTPUT

1

A Pipe!

echo

ERROR

2

INPUT

0 wc

OUTPUT

1

ERROR

2 www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Email Notification

% echo “Message” | \ mail –s “Here’s your message” \ borwicjh@wfu.edu

www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Dates

% DATESTRING=`date +%Y%m%d`

% echo $DATESTRING

20060125

% man date www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

FTP the Hard Way ftp –n –u server.wfu.edu <<_FTP_ user username password put FILE

_FTP_ www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

FTP with wget

 wget \ ftp://user:pass@server.wfu.edu/file

 wget –r \ ftp://user:pass@server.wfu.edu/dir/ www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

FTP with curl curl –T upload-file \

-u username:password \ ftp://server.wfu.edu/dir/file www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Searching: grep

% grep rayra /etc/passwd

% grep –r rayra /etc

% grep –r RAYRA /etc

% grep –ri RAYRA /etc

% grep –rli rayra /etc www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Searching: find

% find /home/borwicjh \

-name ‘*.lis’

[all files matching *.lis]

% find /home/borwicjh \

-mtime -1 –name ‘*.lis’

[*.lis, if modified within 24h]

% man find www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Searching: locate

% locate .lis

[files with .lis in path]

% locate log

[also finds “/var/log/messages”] www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Applied Shell Programming

www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Make Your Life Easier

 TAB completion

 Control+R

 history

 cd -

 Study a UNIX Editor www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

pushd/popd

% cd /tmp

% pushd /var/log

/var/log /tmp

% cd ..

% pwd

/var

% popd

/tmp www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Monitoring processes

 ps

 ps –ef

 ps –u oracle

 ps –C sshd

 man ps www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

“ DOS” Mode Files

 #!/usr/bin/bash^M

 FTP transfer in ASCII, or

 dos2unix infile > outfile www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

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_ www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

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!  www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Passing Arguments

% cat > test.sh <<_TEST_ echo “Your name is \ $1 \ $2 ”

_TEST_

% chmod +x test.sh

% ./test.sh John Borwick ignorethis

Your name is John Borwick www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

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 \

$ONE_UP $JOB $PRNT www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

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 crontab www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Other Questions?

 Shells and Shell Scripts

 bash

 Running Commands

 bash and Banner in Practice www.wfu.edu/~borwicjh/presentations/UNIX%20Shell-Scripting%20Basics.ppt

Download