0% found this document useful (0 votes)
62 views

Shells, Shell Scripting, and The UNIX File System

The document provides an overview of shells, shell scripting, and the UNIX file system. It discusses what shells are and common shells like tcsh, csh, ksh, and bash. It describes shell configuration files like .cshrc, .bashrc, .login, and .logout. It also covers environment variables, the PATH, and storing custom scripts and programs in the ~/bin directory.

Uploaded by

Utsav Banerjee
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
62 views

Shells, Shell Scripting, and The UNIX File System

The document provides an overview of shells, shell scripting, and the UNIX file system. It discusses what shells are and common shells like tcsh, csh, ksh, and bash. It describes shell configuration files like .cshrc, .bashrc, .login, and .logout. It also covers environment variables, the PATH, and storing custom scripts and programs in the ~/bin directory.

Uploaded by

Utsav Banerjee
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 19

Shells, Shell Scripting, and the UNIX File System

CMSC 121 Introduction to UNIX Much of the material in these slides was taken from Dan Hoods CMSC 121 Lecture Notes.

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 http://accounts.umbc.edu/. Shells available on GL include:

Shell Overview

tcsh - Turbo C SHell csh - C SHell ksh - Korn SHell bash - Bourne Again 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.

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.

Aliasing Commands

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:

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.

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 linix.gl servers using the tcsh shell: HOME=/afs/umbc.edu/users/j/o/josey1/home USER=josey1 LOGNAME=josey1 PATH=.:/afs/umbc.edu/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/umbc.edu/users/j/o/josey1/Mail/inbox SHELL=/bin/tcsh TERM=xterm DISPLAY=linux2.gl.umbc.edu:10.0 KRB5CCNAME=FILE:/tmp/krb5cc_l29893 HOSTTYPE=i386-linux VENDOR=intel OSTYPE=linux MACHTYPE=i386 SHLVL=1 PWD=/afs/umbc.edu/users/j/o/josey1/home GROUP=general HOST=linux2.gl.umbc.edu HOSTNAME=linux2.gl.umbc.edu LESSOPEN=|/usr/bin/lesspipe.sh %s TZ=EST5EDT MANPATH=/usr/X11R6/man:/usr/k5/man:/usr/local/man:/usr/man:/usr/share/man EDITOR=/usr/local/bin/pico

Viewing Your Environment Variables

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 directories

~/bin

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. You may also notice that your path may contain a bin directory that is listed as being in your home directory (/afs/umbc.edu/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.

Your ~/bin directory:

Currently, the default shell on UMBCs GL system is tcsh. tcsh is short for Turbo C SHell. Customizing your tcsh shell

Introducing tcsh

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:// www.umbc.edu/oit/sans/helpdesk/Unix/custom.html. 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 .cshrc.bak"). Changes to your configuration file do not effect the system immediately after you save the file.

The .cshrc file.


You might just be able to issue the command source

# # # #

This is the default standard .cshrc provided to csh users. They are expected to edit it to meet their own needs.

if ($?prompt) then ##### sets the prompt if ( -o /bin/su ) then set prompt = "umbc8[1]% else set prompt = "`hostname -s` [\!]# endif ##### some environment variables stty intr "^C" kill "^U" echoe setenv EDITOR /usr/local/bin/pico umask 077 set history = 100 set filec ##### alias alias alias alias alias aliases h history help apropos rm "rm -i ls 'ls -C --color mailtest .mailtest

###Path is loaded with user's bin(s) if ( -o /bin/su ) then unset path else set path = ( . $HOME/bin) endif ##### Load up the path with some ##### additional directories. set path=( $path /usr/local/bin /usr/bsd /bin /usr/bin \ /usr/sbin /usr/bin/X11 /usr/local/X11 \ /etc /usr/etc ) ##### load machine-specific settings if ( -r /usr/site/etc/system.cshrc ) then source /usr/site/etc/system.cshrc 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

# 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 .login File

# File: .logout

Example .logout File

# clean up Internet Explorers cache rm -rf "/afs/umbc.edu/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 GNU.org (http:// www.gnu.org) projects. bash manuals:

A comprehensive online manual is provided at http://www.gnu.org/manual/bash-2.05a/. Aliases http://www.gnu.org/manual/bash-2.05a/html_chapte Controlling the Prompt -

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

# File: .bashrc # # Description: A default # .bashrc for GL ###Source global defs ### if [ -f /etc/bashrc ]; then . /etc/bashrc fi ###set the prompt ### # uncomment out only one # this is hostname and time PS1="\h-(\@): " # this is hostname and # history number #PS1="\h-(\!)# " # this is hostname and # working directory #PS1="\h-(\w)# " # this is hostname and # shortened working # directory #PS1="\h-(\W)# "

### path manipulation ### # add ~/bin to the path, # cwd as well PATH="$PATH:$HOME/bin:./ ### env variables ### # make sure that you # change this to your # username MAIL="/afs/umbc.edu/users/u/ s/username/Mail/inbox export PATH unset USERNAME ### User-specific aliases ### and functions ### alias rm="rm -i"

# 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!

You might also like