Title: Introduction to Unix Shell & Scripting with csh/tcsh
1Introduction to Unix Shell Scripting with
csh/tcsh
- Brief Unix History
- Unix Shell Flavor
- CSH/TCSH Scripts
2Unix Family Tree
3Unix Architecture
4Unix History and Motivation
- The first version of Unix came from ATT in the
early 1970s (Unix is old!). - Unix was developed by programmers and for
programmers. - Unix is designed so that users can extend the
functionality - To build new tools easily and efficiently
- To customize the shell and user interface.
- To string together a series of Unix commands to
create new functionality. - To create custom commands that do exactly what we
want.
5What is Shell?
- Shell is
- Command Interpreter that turns text that you type
(at the command line) in to actions - User Interface take the command from user
- Programming Shell can do
- Customization of a Unix session
- Scripting
6Customization 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 it
starts up - The Startup files can differ for different shell
7Types 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 parents environment
- Interactive non-login shell started
- Started from a command line
- Copies parent environment then invokes
/.bash_rc (or /.cshrc or /.tcshrc)
8Popular Shells
- sh Bourne Shell
- ksh Korn Shell
- csh,tcsh C Shell (for this course)
- bash Bourne-Again Shell
-
9Families of Shells
10Flavors 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
- , gt for command prompt
- To check shell
- echo SHELL (shell is a pre-defined variable)
- To switch shell
- exec shellname (e.g., exec bash)
11Startup 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)
12Some 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 the next
command - TAB Filename completion
13Dont 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
14Create 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
after another - Why shell script?
- Simply and quickly initiate a complex series of
tasks or a repetitive procedure.
15Shell programming
- Make 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/csh
script!...) - willowgt echo SHELL
- /bin/tcsh
- willowgt ./test
- ./test Permission denied.
- willowgt ls -l test
- -rw-r--r-- 1 student ums 33 Sep 18
1633 test - willowgt chmod x test
- willowgt ./test
- This is Test!
16Invoking 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
the executable 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.
17Invoking a Shell script
- The shell itself is program
- It can be run as a command in a shell and also
accepts arguments. Note Lets find your default
shell executing echo SHELL - willowgt echo SHELL
- /bin/tcsh
- To run a shell script
- Which does not have executable permission
- Ex willowgttcsh test
- Run the script with different shell other than
your interactive shell - Ex willowgtsh test
18Invoking 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
- willowgt more test
- !/bin/tcsh
- This line will not run since it is commented
out... - echo 'This is Test!
19Make a comment
- Comments make shell scripts easier to read and
maintain - Pound sign () start a comment line until the end
of that line as second line in previous example,
except - ! In the first line.
- Or inside quotes
20Parameters and Variables
- A shell parameter is associated with a value that
is accessible 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
21Positional Parameters
- The command name and arguments are the 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.
22Positional Parameters
- Change directory to your assigned numbered
subdirectory - willowgt cd 1
- List the directory contents, confirming
display_5args - willowgt ls -l display_5args
- Change mode of display_5args to executable
- willowgt chmod x display_5args
- Execute the script
- willowgt ./display_5args 1 2 3 4 5
- you are running script ./display_5args with
parameter 1 2 3 4 5
23Positional 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
24Positional Parameters
- Example
- willowgt more demo_shift
- !/bin/tcsh
- echo 1 2 3
- shift
- echo 1 2
- shift
- echo 1
- willowgt ./demo_shift 1 2 3
- 1 2 3
- 2 3
- 3
25- willowgt more demo_shift
- !/bin/tcsh
- echo 1 2 3
- shift
- echo 1 2
- shift
- echo 1
- shift
- echo ?
- shift
- echo ?
- shift
- echo ?
- willowgt ./demo_shift 1 2 3 4
- 1 2 3
- 2 3
- 3
- 0
- 0
26Special 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 _at_
- and _at_represent all the command_line arguments
( not just the first nine) - treats the entire list of arguments as a
single argument - _at_ produce a list of separate arguments (Only
bash/ksh/sh)
27TCSH SCRIPT WITH and _at_ willowgt more
for_test !/bin/tcsh echo 'using ' foreach arg
() echo "arg" end echo 'using
_at_' foreach arg (_at_) echo
"arg" end willowgt ./for_test 1 2 3 using
1 2 3 using _at_ Illegal variable name.
BASH SCRIPT WITH and _at_ willowgt more
for_test.bash !/bin/bash echo "using \ " for
arg in "" do echo "arg" done echo
"using \_at_ " for arg in "_at_" do echo
"arg" done willowgt ./for_test.bash 1 2 3 using
1 2 3 using _at_ 1 2 3
28Special Parameters
- The number of arguments
- Return a decimal number
- Use the test to perform logical test on this
number
willowgt more num_args echo this script is called
with arguments. willowgt chmod x
num_args willowgt ./num_args this script is
called with 0 arguments.
willowgt ./num_args 1 this script is called with 1
arguments. willowgt ./num_args 2 this script is
called with 1 arguments. willowgt ./num_args
0 this script is called with 1 arguments.
29Special 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 command
failed. - A zero value is true and means that the command
was successful - You can specify the exit status that a shell
script returns by using the exit built-in
followed by a number - Otherwise, the exit status of the script is the
exit status of the last command the script ran.
30- willowgt ls a
- a No such file or directory
- willowgt echo ?
- 2
- willowgt echo olemiss
- olemiss
- willowgt echo ?
- 0
- willowgt more exit_status
- echo this program will have the exit code of 8.
- exit 8
- willowgt ./exit_status
- this program will have the exit code of 8.
- willowgt echo ?
- 8
- willowgt echo ?
- 0
31Summary
- A shell is both a command interpreter and a
programming language. - 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/sub
stitution/pathname expansion - Quote ( \ )
- all but parameter, variable expansion and \
- suppress all types of expansion
- \ escaping the following special character
32Basic Script Example
- willowgt more basic_script
- !/bin/tcsh
- echo 'Listing the files in long format appending
due date/time' - echo
- ls -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 gtgt
file_differences - echo
- echo 'sleeping mode for 4 seconds. Please wait!'
- echo
- sleep 4
33Killing BAD Processes
- The kill command
- kill -ltsignalgt ltpidgt
- Send ltsignalgt to process ltpidgt
- The killall command
- killall -ltsignalgt ltcommandgt
- Send ltsignalgt to all processes that start with
ltcommandgt - Useful signals (kill l for the complete list)
- TERM the default, terminate, kills things
nicely - KILL will kill anything, but not nicely
- HUP hangup, used to reload configurations
- STOP stops (suspends) a running process
34Summary
- Shell parameters
- HOME
- PATH
- PS1
- SHELL
- 0
- n
-
- _at_
-
-
- !
- ?
35Summary
- Special Characters
- NEWLINE
-
- ()
-
-
- gt
- gtgt
- lt
- ltlt