130 likes | 242 Views
CS 497C – Introduction to UNIX Lecture 22: - The Shell. Chin-Chih Chang chang@cs.twsu.edu. /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.
E N D
CS 497C – Introduction to UNIXLecture 22: - The Shell Chin-Chih Changchang@cs.twsu.edu
/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.