CS 497C – Introduction to UNIX Lecture 22: - The Shell Chin-Chih Chang
Published byModified over 6 years ago
Presentation on theme: "CS 497C – Introduction to UNIX Lecture 22: - The Shell Chin-Chih Chang"— Presentation transcript:
CS 497C – Introduction to UNIX Lecture 22: - The Shell Chin-Chih Chang firstname.lastname@example.org email@example.com
/dev/null and /dev/tty: Two Special Files Quite often, you may want to test whether a program runs successfully without seeing the output or the error messages on the screen. You have a special file that simply accepts any stream without growing in size – the file /dev/null: $ cal chap100 2>/dev/null $ cat /dev/null
Pipes $ who > user.lst $ wc –l < user.lst The method of using two commands in sequence has certain obvious disadvantages: –The process is slow. –The intermediate file is need. –Temporary files can be very large. You can use the | (pipe) to connect two commands. $ who | wc -l
Pipes who is said to be piped to wc. When a sequence of commands combined together with one or more | symbols, a pipeline is said to be formed. You can use the col –b command to remove control characters from the manual pages. man grep | col –b > grep.man grep locates lines containing a specified pattern in its input. $ cat * | grep “print”
tee: Splitting a Stream The UNIX tee command breaks up its input into two components; one component is saved in a file, and the other is connected to the standard output. Being also a filter (uses standard input and standard output), tee can be placed anywhere in a pipeline. $ who | tee user.lst $ who | tee user.lst | wc -l
Command Substitution The shell enables the argument of a command to be obtained from the standard output of another. This feature is called command substitution. When scanning the command line, the ` (backquote or backtick) is another metacharacter that the shell looks for.
Command Substitution If the ` pair is found, the shell executed the command enclosed in the ` pair, and replaces the enclosed command line with the output of the command. $ echo Today is `date` Today is Thu Oct 11 22:08:36 CDT 2001 You can use this feature to generate useful message. $ echo “There are `ls | wc -l` files”
Shell Variables A shell variable is of the string type, which means that the value is stored in ASCII rather than in binary format. A shell variable take on the generalized form variable=value (except in the C shell). $ x = 37; echo $x 37 $ unset x; echo $x
Shell Variables The C shell uses the set statement set variables. set x = 10 You can set a pathname or a command to a variable or substitute to set the variable. $ dir=“ls -Fax”; $dir $ mydir=`pwd`; echo $mydir
Shell Scripts Try executing the file containing these commands by invoking the filename: $ date-dir.sh date-dir.sh: Permission denied. Executable permission is usually necessary for any shell script to run. $ chmod u+x date-dir.sh $ date-dir.sh
Shell Scripts A shell script is an ordinary file containing a set of commands, which is executed in an interpretive manner. Also known as a shell program or shell procedure. The date-dir.sh shell script has a sequence of three commands. directory=`pwd` echo The date today is `date` echo The current directory is $directory
The Shell’s Treatment of the Command Line The shell processes the command in the following order: –Parsing – break up the command into words. –Variable evaluation – A words preceded by a $ are evaluated as variables. –Command substitution – Any command in back quotes is executed and replaced. –Redirection – redirect input and output. –Wild-card interpretation – scan the command line for wild cards and match the file list. –Path evaluation – search for the command.
The Other Shells The original UNIX system came with the Bourne shell. The Korn shell (ksh), the bash (bash), and the C shell are widely used in UNIX. Korn and bash maintain near-complete compatibility with the Borne shell. Because commands and integer and string handling features are built in, programs run under Korn and bash execute faster than under Bourne.