Unix Shell Scripts

A Unix shell, also called "the command line", provides the traditional user interface for the Unix operating system and for Unix-like systems. Users direct the operation of the computer by entering command input as text for a shell to execute. Within the Microsoft Windows suite of operating systems the analogous program is command.com, or cmd.exe for Windows NT-based operating systems.

The most generic sense of the term shell means any program that users use to type commands. Since in the Unix operating system users can select which shell they want to use (which program should execute when they login), many shells have been developed. It is called a "shell" because it hides the details of the underlying operating system behind the shell's interface (in contrast with the "kernel", which refers to the lowest-level, or 'inner-most' component of an operating system). Similarly, graphical user interfaces for Unix, such as GNOME, KDE, and Xfce can be called visual shells or graphical shells. By itself, the term shell is usually associated with the command line. In Unix, any program can be the user's shell. Users who want to use a different syntax for typing commands can specify a different program as their shell.

The term shell also refers to a particular program, such as the Bourne shell, sh. The Bourne shell was the shell used in early versions of Unix and became a de facto standard; every Unix-like system has at least one shell compatible with the Bourne shell. The Bourne shell program is located in the Unix file hierarchy at /bin/sh. On some systems, such as BSD, /bin/sh is a Bourne shell or equivalent, but on other systems such as Linux, /bin/sh is likely to be a link to a compatible, but more feature-rich shell(like Bash shell). POSIX specifies its standard shell as a strict subset of the Korn shell.

You can use any one of these shells if they are available on your system. And you can switch between the different shells once you have found out if they are available -
.
Different Shells

1. Bourne shell (sh)
2. C shell (csh)
3. TC shell (tcsh)
4. Korn shell (ksh)
5. Bourne Again SHell (bash)

Bourne shell (sh)
This is the original Unix shell written by Steve Bourne of Bell Labs. It is available on all UNIX systems. This shell does not have the interactive facilites provided by modern shells such as the C shell and

Korn shell
You are advised to to use another shell which has these features.
The Bourne shell does provide an easy to use language with which you can write shell scripts.

C shell (csh)
This shell was written at the University of California, Berkley. It provides a C-like language with which to write shell scripts- hence its name.

TC shell (tcsh)
This shell is available in the public domain. It provides all the features of the C shell together with emacs style editing of the command line.

Korn shell (ksh)
This shell was written by David Korn of Bell labs. It is now provided as the standard shell on Unix systems. It provides all the features of the C and TC shells together with a shell programming language similar to that of the original Bourne shell. It is the most efficient shell. Consider using this as your standard interactive shell.

Bourne Again Shell (bash)
This is a public domain shell written by the Free Software Foundation under their GNU initiative. Ultimately it is intended to be a full implementation of the IEEE Posix Shell and Tools specification. This shell is widely used within the academic commnity. bash provides all the interactive features of the C shell (csh) and the Korn shell (ksh). Its programming language is compatible with the Bourne shell (sh). If you use the Bourne shell (sh) for shell programming consider using bash as your complete shell environment.

Summary of shell facilities
--------------------------Bourne C TC Korn BASH
________________________________________________________
command history - No Yes Yes Yes Yes
command alias - No Yes Yes Yes Yes
shell scripts - Yes Yes Yes Yes Yes
filename completion - No Yes* Yes Yes* Yes
command line editing - No No Yes Yes* Yes
job control - No Yes Yes Yes Yes
________________________________________________________
* not the default setting for this shell

Details:

The sh utility is a sophisticated shell (command interpreter) that offers, depending on the options chosen, compatibility with the Korn, Bourne-Again, and POSIX shells available on many UNIX systems. You can use it as a replacement for the standard Windows command interpreter (cmd.exe)

When invoked with the sh name, sh is primarily a POSIX.2 compatible shell with some selected Korn and Bourne-Again shell behavior.

resh is a restricted version of that shell and is equivalent to sh -r. For more information on the restricted shell, see the description of the -r option. Regardless of how it is launched, this reference page uses resh to refer to the restricted shell.

ksh is a version of the shell that uses, by default, standard Korn behavior when it may conflict with bash or MKS KornShell behavior. ksh is equivalent to running sh with the -K or -o korn options. Regardless of how it is launched, this reference page uses ksh to refer to the shell operating in KornShell mode.

Bash(Bourne-Again Shell) is the shell, or command language interpreter, that will appear in the GNU operating system. Bash is an sh-compatible shell that incorporates useful features from the Korn shell (ksh) and C shell (csh).

Accessing AWK variables in SHELL Script: Using “eval”

eval `echo $* awk -F: '{printf("a=%s; b=%s; c=%s\n", $1, $2, $3)}'`
print $a
print $b
print $c

Accessing SHELL variables in AWK Script
1.Protect the shell variables from awk by enclosing them with "'" (i.e. double quote - single quote - double quote).


awk '{print "'"$VAR1"'", "'"$VAR2"'"}' input_file

2. Use the -v switch to assign the shell variables to awk variables. This works with nawk, but not with all flavours of awk. On my system (Solaris 2.6) -v cannot be used with /usr/bin/awk but will work with /usr/xpg4/bin/awk.

nawk -v v1=$VAR1 -v v2=$VAR2 '{print v1, v2}' input_file


Links:
Advanced Bash-Scripting Guide -
http://www.faqs.org/docs/abs/HTML/index.htmlhttp://tldp.org/LDP/abs/html/

Unix Shell Scripting -
http://cfaj.freeshell.org/shell/

Bash Shell Guide -
www.gnu.org/software/bash/manual/

Unix Shells -
http://www.ussg.iu.edu/usail/external/recommended/diffshell.html

Effective AWK programming -
http://www.gnu.org/manual/gawk/gawk.pdf

Manipulating Strings : Shell Scripts -
http://www.faqs.org/docs/abs/HTML/string-manipulation.html

Linux Shell Scripting Tutorial v1.05r3 - A Beginner's handbook -
http://www.cyberciti.biz/nixcraft/linux/docs/uniqlinuxfeatures/lsst/

Awk, Sed & grep -
http://www.securitydocs.com/pdf/3489.PDF

Awk & Sed -
http://unix.ittoolbox.com/topics/t.asp?t=429&p=429&h1=429#

Accessing AWK variables from Shell -
http://www.unix.com/shell-programming-scripting/32384-access-awk-variables-outside-scope.html

Accessing Shell Variables from AWK -
http://www.tek-tips.com/faqs.cfm?fid=1281