Tcsh Scripting Mcsr Basic

35
Introduction to Unix Shell & Scripting with csh/tcsh Brief Unix History Unix Shell & Flavor CSH/TCSH Scripts

Transcript of Tcsh Scripting Mcsr Basic

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 1/35

Introduction to Unix Shell&

Scripting with csh/tcshBrief Unix History

Unix Shell & FlavorCSH/TCSH Scripts

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 2/35

Unix Family Tree

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 3/35

Unix Architecture

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 4/35

Unix History and Motivation

The first version of Unix came from AT&T in theearly 1970s (Unix is old!).

Unix was developed by programmers and for programmers .

Unix is designed so that users can extend thefunctionality To build new tools easily and efficiently To customize the shell and user interface.

To string together a series of Unix commands to createnew functionality. To create custom commands that do exactly what we

want.

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 5/35

What is Shell?

Shell is

Command Interpreter that turns text that youtype (at the command line) in to actions:

User Interface: take the command from user

Programming Shell can do

Customization of a Unix session

Scripting

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 6/35

Customization of a Session

Each shell supports some customization. User prompt

Where to find mail

Shortcuts (alias)

The customization takes place in startup  files

Startup files are read by the shell when itstarts up

The Startup files can differ for different shell

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 7/35

Types of Shells

Interactive vs. Non-interactive; login or not

Interactive login shell started after login

Non-interactive shell Present when shell script is running

Just inherits parent‟s environment 

Interactive non-login shell started Started from a command line

Copies parent environment then invokes~/.bash_rc (or ~/.cshrc or ~/.tcshrc)

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 8/35

Popular Shells

sh Bourne Shell

ksh Korn Shell

csh,tcsh C Shell (for this course)  bash Bourne-Again Shell

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 9/35

Families of Shells

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 10/35

Flavors of Unix Shells

Two main flavors of Unix Shells Bourne (or Standard Shell): sh, ksh, bash, zsh

• Fast

• $ for command prompt

C shell : csh, tcsh• better for user customization and scripting

• %, > for command prompt

To check shell: % echo $SHELL (shell is a pre-defined variable)

To switch shell: % exec shellname (e.g., % exec bash)

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 11/35

Startup files sh,ksh:

/etc/profile (out-of-the-box login shell settings)/etc/profile.local (addtnl. local system settings)~/.profile (addtnl. user customized settings)~/.kcshrc (non-login shell user customization)

 bash:/etc/profile (out-of-the-box login shell settings)/etc/bash.bashrc (out-of-box non-login settings)

/etc/bash.bashrc.local (global non-login settings)~/.bash_profile (login shell user customization)

~/.bashrc (non-login shell user customization)

~/.bash_logout (user exits from interactive login shell)

csh/tcsh:

/etc/login (out-of-the-box login shell settings)/etc/csh.login (non-login shell customizations)/etc/csh.login.local (global non-login settings)

~/.login: (login shell user customizations)

~/.cshrc: (non-login shell user customizations)

~/.cshrc.logout: (non-login shells at logout)

~/.logout: (read by login shells at logout)

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 12/35

Some Special Keys Under tcsh

Ctrl-U = Delete everything on the command-line

Ctrl-A = Move cursor to the front Ctrl-E = Move cursor to the end Ctrl-P = Set the current command-line to the

previous command

Ctrl-N = Set the current command-line to thenext command TAB = Filename completion

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 13/35

Don‟t forget your Best Friend 

% man command (e.g., % man ls)

shows information about the command

usually space or Enter for more information

q to quit

% man man

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 14/35

Create a shell script

Creating a simple shell script A shell script is a file that contains commands that the shell can

execute.• Any commands you enter in response to a shell prompt.

A utility

A compiled program

Another shell script

• Control flow commands

Run a shell script Enter the script filename on the command line

The shell interprets and execute the commands one afteranother

Why shell script? Simply and quickly initiate a complex series of tasks or a

repetitive procedure.

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 15/35

Shell programmingMake the file executable

When you create a shell script using a editor,does it have execute permission typically?

• Example: (Make sure you are using tcsh/cshscript!...)

willow> echo $SHELL

 /bin/tcsh

willow> ./test

./test: Permission denied.

willow> ls -l test-rw-r--r-- 1 student ums 33 Sep 18 16:33 test

willow> chmod +x test

willow> ./test

This is Test!

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 16/35

Invoking a Shell script

Give the shell a command on the command line

The shell forks a process

• Which creates a non-interactive duplicate of the shell process

The newly forked process attempts to exec the command

• If the command is an executable program Exec succeeds

System overlays the newly created subshell with theexecutable program

• The command is a shell script

Exec failed The command is assumed to be a shell script

The subshell runs the commands in the shell.

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 17/35

Invoking a Shell script The shell itself is program

It can be run as a command in a shell andalso accepts arguments. Note: Let‟s find your default shell executing “echo $SHELL” 

willow> echo $SHELL

 /bin/tcsh

To run a shell script

Which does not have executable permission

Ex: willow>tcsh test Run the script with different shell other than

your interactive shell

Ex: willow>sh test

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 18/35

Invoking a Shell script

Put special characters on the first line of a shell script To tell OS checks what kind of file it is before attempting to

exec it

To tell which utility to use (sh, csh, tcsh, …) 

Special sequence The firsts two character of a script are #! Then followed by the absolute pathname of the program that

should execute the script

Ex:willow> more test

#!/bin/tcsh# This line will not run since it is commented out...

echo 'This is Test!‘ 

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 19/35

Make a comment #

Comments make shell scripts easier toread and maintain

Pound sign (#) start a comment line untilthe end of that line as second line inprevious example, except

#! In the first line.

Or inside quotes

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 20/35

Parameters and Variables

A shell parameter is associated with a value that isaccessible to the user. Shell variables

• Names consist of letters, digits and underscores By convention, environment variables use UPPERCASE

• User created variables (create and assign value)• Keyword shell variables

Have special meaning to the shell Being created and initialized by the startup file

Positional parameters• Allow you to access command line arguments

Special parameters• Such as

The name of last command The status of most recently executed command The number of command-line arguments

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 21/35

Positional Parameters

The command name and arguments arethe positional parameters.

Because you can reference them by their

position on the command line

$0 : Name of the calling program

$1 - $9 : Command-line Arguments

• The first argument is represented by $1• The second argument is represented by $2

• And so on up to $9

• The rest of arguments have to be shifted to be able

to use $1- $9 parameters.

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 22/35

Positional Parameters

Example:•Change directory to your assigned numbered subdirectory

willow> cd 1

•List the directory contents, confirming display_5args

willow> ls -l display_5args

•Change mode of display_5args to executable

willow> chmod +x display_5args

•Execute the script

willow> ./display_5args 1 2 3 4 5

you are running script ./display_5args with parameter 1 2 3 4 5

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 23/35

Positional Parameters

$1-$9 allows you to access 10 arguments How to access others?

Promote command-line arguments: shift Built-in command shift promotes each of the

command-line arguments.• The first argument ( which was $1) is discarded• The second argument ( which was $2) becomes $1• The third becomes the second

• And so on Makes additional arguments available Repeatedly using shift is a convenient way to

loop over all the command-line arguments

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 24/35

Positional Parameters

Example:willow> more demo_shift

#!/bin/tcsh

echo $1 $2 $3shift

echo $1 $2

shift

echo $1

willow> ./demo_shift 1 2 3

1 2 3

2 3

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 25/35

 willow> more demo_shift

#!/bin/tcsh

echo $1 $2 $3

shift

echo $1 $2

shift

echo $1

shift

echo $?

shift

echo $?

shift

echo $?

 willow> ./demo_shift 1 2 3 4

1 2 32 3

3

0

0

shift: No more words.

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 26/35

Special Parameters

Useful values

Command-line arguments

Execution of shell commands

Can not change the value directly, like positional parameters

Value of Command-line arguments: $* and $@ $* and $@represent all the command_line arguments ( not just

the first nine)

“$*” : treats the entire list of arguments as a single argument 

“$@” : produce a list of separate arguments (Only bash/ksh/sh)

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 27/35

TCSH SCRIPT WITH $*and $@

willow> more for_test#!/bin/tcsh

echo 'using $*'foreach arg ($*)

echo "$arg"end

echo 'using $@'foreach arg ($@)

echo "$arg"end

willow> ./for_test 1 2 3

using $*123using $@Illegal variable name.

BASH SCRIPT WITH $*and $@

willow> more for_test.bash#!/bin/bash

echo "using \$* "for arg in "$*"do

echo "$arg"done

echo "using \$@ "for arg in "$@"do

echo "$arg"donewillow> ./for_test.bash 1 2 3

using $*1 2 3using $@123

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 28/35

Special Parameters

The number of arguments: $#

Return a decimal number

Use the test to perform logical test on this

numberwillow> more num_args

echo this script is called with $#arguments.

willow> chmod +x num_args

willow> ./num_args

this script is called with 0 arguments.

willow> ./num_args 1

this script is called with 1 arguments.

willow> ./num_args 2

this script is called with 1 arguments.

willow> ./num_args 0

this script is called with 1 arguments.

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 29/35

Special Parameters

Exit status: $? When a process stops executing for any reason,

it returns an exit status to its parent process. By convention,

• Nonzero represents a false value that the commandfailed.

• A zero value is true and means that the command wassuccessful

You can specify the exit status that a shell script

returns by using the exit built-in followed by anumber• Otherwise, the exit status of the script is the exit status

of the last command the script ran.

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 30/35

willow> ls a

a: No such file or directory

willow> echo $?

2

willow> echo olemissolemiss

willow> echo $?

0

willow> more exit_statusecho this program will have the exit code of 8.

exit 8

willow> ./exit_status

this program will have the exit code of 8.

willow> echo $?8

willow> echo $?

0

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 31/35

Summary

A shell is both a command interpreter and a programminglanguage. Job control

Control-z/fg/bg/&

Variables Local and environment variables Declare and initialize a variable ( no type) Export unset

Command line expansion Parameter expansion/variable

expansion/command/substitution/pathname expansion

Quote ( „ „ “ “ \ )• “ “ all but parameter, variable expansion and \ • „ „ suppress all types of expansion •  \ escaping the following special character

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 32/35

Basic Script Examplewillow> more basic_script

#!/bin/tcsh

echo 'Listing the files in long format appending due date/time'

echols -lrtah

echo

echo 'Listing the files in long format appending due date/time'

echo

df -k

# Using diff to find two files differences and writing them to another file

diff -c for_test.bash for_test >> file_differences &

echo

echo 'sleeping mode for 4 seconds. Please wait!'

echo

sleep 4

echo

echo 'GO REBELS'

echo 'To find out the differences of files for_test and for_test.bash, '

echo 'Please open file_differences via using cat command as shown below:'

echo 'cat file_differences‟ 

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 33/35

Killing BAD Processes

The “kill” command: kill [-<signal>] <pid> 

Send <signal> to process <pid> 

The “killall” command: killall [-<signal>] <command> 

Send <signal> to all processes that start with<command> 

Useful signals (kill –l for the complete list):TERM the default, “term inate”, kills things

nicelyKILL will kill anything, but not nicelyHUP “h angup ”, used to reload

configurationsSTOP stops (suspends) a running process 

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 34/35

Summary

Shell parameters HOME

PATH

PS1

SHELL $0

$n

$*

$@

$# $$

$!

$?

8/3/2019 Tcsh Scripting Mcsr Basic

http://slidepdf.com/reader/full/tcsh-scripting-mcsr-basic 35/35

Summary

Special Characters NEWLINE

;

()

&

|

>

>>

<

<<

*

?

 \ 

„  “ 

` `

[]

$

. #

&&

||

!