Shells, Shell
Scripting, and the
UNIX File System
CMSC 121 Introduction to UNIX
Much of the material in these slides was taken from
Dan Hood’s CMSC 121 Lecture Notes.
Shell Overview
What is a Shell?
UNIX shells provide a "command line" interface
which allows the user to enter commands which
are translated by the shell into something the
kernel can comprehend and then is sent off to the
kernel for it to act upon.
The user can pick their shell (just like the
applications, desktop manger, window manager,
etc. on a UNIX system).
UMBC Shells
On the UMBC GL network, the default UNIX shell
is tcsh - Turbo C SHell. The default can be
changed by the user via [Link] .
Shells available on GL include:
tcsh - Turbo C SHell
csh - C SHell
ksh - Korn SHell
bash - Bourne Again SHell
sh - SHell
Shell Overview
Linux Default Shell
Most Linux systems (especially home installations)
default to the bash shell.
Changing Your Shell - On a Home Based
System
Usually there is a command called chsh that
stands for change shell. You have to enter your
password and then the absolute path to the new
shell that you wish to use.
(06:08 PM): chsh
Changing shell for Eric.
Password: New shell [/bin/bash]: /bin/csh
Shell changed.
Aliasing Commands
A helpful feature, especially for many users new to
UNIX, is the alias function.
The alias command assigns a command, possibly
with many options and flags, to another name.
Usually it is a shorter name or one that is easier to
remember.
Setting up an alias:
The exact syntax depends on the shell that you are
using. We will cover how to do it under tcsh and
bash. Most other shells use a similar or identical
syntax.
tcsh syntax:
alias <aliased name> <original command>
bash syntax:
alias <aliased name>=<original command>
Environment Variables
Think of the shell as any other
program that you write. Your
program maintains information about
its current state. Since the shell's
main job is to act as a liaison between
the kernel and the user, it maintains
information about the computing
environment. The environment
variables hold this information.
Viewing Your Environment
Variables
Most UNIX systems provide a command env that will allow you to see all of these
variables that the shell is maintaining.
Here is an example of the env command issued on one of the [Link] servers using
the tcsh shell:
HOME=/afs/[Link]/users/j/o/josey1/home
USER=josey1
LOGNAME=josey1
PATH=.:/afs/[Link]/users/j/o/josey1/home/bin:/usr/local/bin:/usr/bsd:/
bin:/usr/bin:/usr/sbin:/usr/bin/X11:/usr/local/X11:/etc:/usr/etc:/usr/
k5/bin:/usr/afsws/bin:/bin:/usr/java/bin:/usr/afsws/bin:/usr/X11R6/bin
MAIL=/afs/[Link]/users/j/o/josey1/Mail/inbox
SHELL=/bin/tcsh
TERM=xterm
DISPLAY=[Link].0
KRB5CCNAME=FILE:/tmp/krb5cc_l29893
HOSTTYPE=i386-linux
VENDOR=intel
OSTYPE=linux
MACHTYPE=i386
SHLVL=1
PWD=/afs/[Link]/users/j/o/josey1/home
GROUP=general
HOST=[Link]
HOSTNAME=[Link]
LESSOPEN=|/usr/bin/[Link] %s
TZ=EST5EDT
MANPATH=/usr/X11R6/man:/usr/k5/man:/usr/local/man:/usr/man:/usr/share/man
EDITOR=/usr/local/bin/pico
Important Environment
Variables
HOME - your home directory.
USER and LOGNAME - your login ID.
HOSTNAME - the name of the host computer.
PWD - the current working directory.
MAIL - where your mail is located.
PATH - a list of directories in which to look for
executable commands.
Certain applications and commands may
communicate with the shell and reference the
environment variables that it maintains.
For example, it seems that frm and nfrm seem not to
work if $MAIL is not defined. frm and nfrm are
commands to list the contents of your inbox without
logging into pine.
~/bin
bin directories
Program files or commands, also called binary
executable files and script files, are kept in
various places throughout the system.
Usually these binary files are stored in bin
(short for binary) directories throughout the
system.
If you take a look at the paths are stored in your
$PATH environment variable, you will notice
that many of these directories end in .../bin.
Your ~/bin directory:
You may also notice that your path may contain
a bin directory that is listed as being in your
home directory
(/afs/[Link]/users/u/s/username/home/bin).
This is where you can store your own compiled
programs or scripts that you would like to be
able to run from anywhere on the system.
Introducing tcsh
Currently, the default shell on UMBC’s GL system is
tcsh.
tcsh is short for Turbo C SHell.
Customizing your tcsh shell
The UNIX@UMBC guide linked from the course webpage has a
pretty good section on customizing your tcsh shell.
The URL of that specific section is http://
[Link]/oit/sans/helpdesk/Unix/[Link].
The .cshrc file.
tcsh looks for a configuration file at startup time called
"~/.cshrc"
I recommend backing up a copy of your account
configuration files before modifying them (such as
"cp .cshrc .[Link]").
Changes to your configuration file do not effect the system
immediately after you save the file.
You might just be able to issue the command source ~/.cshrc to
make the changes take effect.
You may need to logout and log back in for these changes to take
effect.
# This is the default standard if ($?prompt) then
# .cshrc provided to csh users.
# They are expected to edit it to ##### sets the prompt
# meet their own needs. if ( -o /bin/su ) then
set prompt = "umbc8[1]% “
###Path is loaded with user's bin(s) else
if ( -o /bin/su ) then set prompt = "`hostname -s`
unset path [\!]# “
else endif
set path = ( . $HOME/bin)
endif ##### some environment variables
stty intr "^C" kill "^U" echoe
##### Load up the path with some setenv EDITOR /usr/local/bin/pico
##### additional directories. umask 077
set path=( $path /usr/local/bin set history = 100
/usr/bsd /bin /usr/bin \ set filec
/usr/sbin /usr/bin/X11
/usr/local/X11 \ /etc /usr/etc ) ##### aliases
alias h history
##### load machine-specific settings alias help apropos
if ( -r /usr/site/etc/[Link] ) alias rm "rm -i“
then alias ls 'ls -C --color‘
source /usr/site/etc/[Link] alias mailtest .mailtest
endif
##### my additions here down
alias mem "quota -v“
endif
tcsh Customization
Tricks
Since many students do not ever look at
the core dump files, they are simply an
annoyance that takes up space in your
account. To prevent core dumps from
being created, add the following line to
your .cshrc file:
limit coredumpsize 0
For a better version of auto completion,
add the following line to your .cshrc file:
set autolist
Login and Logout Files
When using the tcsh shell, it
attempts to execute certain files
when you log onto the system and
when you logout of the system.
When you logon, tcsh looks for a file
called ".login" and tries to execute
the contents of the file.
When you logout, tcsh looks for a file
called ".logout" and tries to execute
the contents of the file
Example .login File
# This is the default standard .login provided to csh users.
# They are expected to edit it to meet their own needs.
# Set the interrupt character to Ctrl-c and do clean backspacing.
##### sets interrupt sequence #####
if (-t 0) then
stty intr '^C' echoe
endif
##### Set the TERM environment variable #####
eval `tset -s -Q`
####### my modifications from here #######
# print new mail
echo "--- New Mail Messages ---“
nfrm
# print my quota
echo "\n--- My Disk Quota ---“
quota –v
echo "“
# remove that annoying netscape lock
rm -f .netscape/lock
Example .logout File
# File: .logout
# clean up Internet Explorer’s cache
rm -rf
"/afs/[Link]/users/u/s/username/ho
me/.2kprofile/Temporary Internet
Files“
# clean up UNIX Netscape's cache
rm -rf .netscape/cache
# clear the screen
clear
Introduction to bash
The bash shell is one of the many shells that
are available to you on the GL network.
Almost any home installation of Linux defaults
to the bash shell.
bash is one the many [Link] (http://
[Link]) projects.
bash manuals:
A comprehensive online manual is provided at
[Link]
Aliases -
[Link]
er/bashref_6.html#SEC77
Controlling the Prompt -
[Link]
er/bashref_6.html#SEC81
bash Configuration Files
bash has two different login files.
.bashrc gets read when you open a local shell on a
machine
.bash_profile only gets read if and only if you login
from a remote machine. Note that .bash_profile
itself reads in your .bashrc file as well.
If you want aliases to be executed regardless,
then you should put them in the .bashrc file.
There are no default bash configuration files
currently being provided for GL. The two
example configuration files are courtesy of
Dan Hood.
# File: .bashrc # ### path manipulation ###
# Description: A default # add ~/bin to the path,
# .bashrc for GL # cwd as well
###Source global defs ### PATH="$PATH:$HOME/bin:./“
if [ -f /etc/bashrc ]; then
. /etc/bashrc ### env variables ###
fi # make sure that you
# change this to your
###set the prompt ### # username
# uncomment out only one MAIL="/afs/[Link]/users/
# this is hostname and time u/s/username/Mail/inbox“
PS1="\h-(\@): " export PATH
# this is hostname and unset USERNAME
# history number
#PS1="\h-(\!)# " ### User-specific aliases
# this is hostname and ### and functions ###
# working directory alias rm="rm -i"
#PS1="\h-(\w)# "
# this is hostname and
# shortened working
# directory
#PS1="\h-(\W)# "
# File: .bash_profile
# Get the aliases and functions
# Get whatever is in your
# .bashrc config file
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
UNIX File System
Overview
Covered in class!