330 likes | 515 Views
Shells. shell basics. Shell Review. Command Processor Typed commands on a terminal Executed by the shell Boune family C family many others… Note: examples will center on the bash shell Shells do vary on implementation of some features. Pattern Matching: Wild Cards. Filenames.
E N D
Shell Review • Command Processor • Typed commands on a terminal • Executed by the shell • Boune family • C family • many others… • Note: examples will center on the bash shell • Shells do vary on implementation of some features
Pattern Matching: Wild Cards Filenames Wild Card Examples • Replace parts of names with arbitrary matching character(s) • Combination of known and unspecifed characters • ?, *, […]
Standard Files: Input/Ouput/Error • Standard input (std in) • Where the data is coming from • File • Stream • Usually the keyboard or terminal • Standard output (std out) • Where the data is going to • File • Stream • Usually the display or terminal • Standard error (std err) • Where error messages are sent • File • Stream • Usually the display or terminal • Default is same as Standard output
Data Sources/Redirection • Terminal • Keyboard - source • Screen – sink • File redirection • > and >> • Send the standard data to a file • < • Receive the standard data from a file • Piping • | • Send the output of one program to the input of another • Different utilities and programs will handle defaults for std in and std out differently
Example • wc • word count • counts the number of • lines • words • characters from the input • Examples of data source and sink using wc: • No parameters: data will follow from std in: • wcThis is a line of dataThis is another<ctrl-d> 2 9 34 • File as a parameter • wc /dir/file 8 50 1084 /dir/file • Note it has the filename in the output • Redirection from a file • wc < /dir/file 8 50 1084 • Piped from another program • ls | wc 6 6 60
File Descriptor • Standard files have numeric representations • 0 – Standard input • 1 – Standard output • 2 – Standard error • Example: • #cat bad.filecat: bad.file: No such file or directory#cat bad.file 2> err.msg#wc err.msg 1 7 41 err.msg#more err.msgcat: bad.file: No such file or directory
Problem: want std out and std err to go to same file • Example: file1 exists, file2 does not • #cat file1 file2file 1 data cat: file2: No such file or directory • redirect std out • #cat file1 file2 1> reportcat: file2: No such file or directory#more reportfile 1 data • redirect std err • #cat file1 file2 2> reportfile 1 data#less reportcat: file2: No such file or directory • cannot coherently redirect both streams to the same file, need another method • Can use >> for one or replicating descriptors • May show order differently or not work at all
Replicating Descriptors • 1>&2 • send std out to destination of std err • 2>&1 • send std err to destination of std out • redirect std err, std out • #cat file1 file2 2> report 1>&2#less reportfile 1 data cat: file2: No such file or directory
Special files • /dev/null • “bit bucket” • /dev/tty • your default terminal • useful when different users log on • everyone can use /dev/tty as their terminal
Pipes • Send output of one command as the input to another command • Examples • #ls | wc31 32 530 • Sent the short directory listing to wc • #ls –l | wc32 282 2121 • Sent the long directory listing towc
Tee • Sends data to std out and a file • Not part of the shell • Example: • #who | tee users.txtajk tty7 2013-02-16 22:14 (:0)ajk pts/0 2013-03-01 08:45 (:0.0)#cat users.txtajk tty7 2013-02-16 22:14 (:0)ajk pts/0 2013-03-01 08:45 (:0.0)
Command substitution • Command arguments can be obtained or substituted from the std out of a program: • Use backticks ` to denote • That is not the single quote ' • AKA Accent Gravé • Examples: • #echo This year is `date +%Y`This year is 2013 • #ls –la `cat filelist`ls: cannot access file2: No such file or directoryls: cannot access file4: No such file or directory-rw-r-r- 1 ajkombol ajkombol 14 Mar 3 16:34 file1-rw-r-r- 1 ajkombol ajkombol 14 Mar 3 16:34 file3 #cat filelistfile1 file2file3 file4
Shell variables • Can assign values to variables • myvar=myvalue • Important: no spaces! • Use by putting $ in front • $myvar • Example: • #ext=.sh#name=doit#compname=$name$ext#echo $compnamedoit.sh
Scripts Intro • Shells can execute groups of commands in a file • Scripts • Script basics • They have basic control sequences • e.g. conditionals and looping • if, for, while • They may contain commands • They must have execute permission
Environment preview Using the shell to modify your runtime environment
Shell variables - Environment • Two shell variable types: • Environment • Used by a user in general • PATH • HOME • SHELL • Etc. • Note: • By convention environment variables are UPPER CASE • Local • Used for specific purposes • Typically available to current process only • Case sensitive
Local Variables • Easy to create for temporary use • my_var=value • Restricted in scope
Environment Variables • Export to create an Environmental Variable • export ENV_VAR • Can apply value at creation or later • Good for creating a set of common definitions
customizing the environment Using the shell
Setting the default shell • What shell is set as your default? • echo $SHELL • Returns something like: • /bin/bash-or- • /usr/bin/bash • Depends on distro • Popular shells • bash • csh • korne • bourne
Environmental Variables • Available in the user’s total environment • Sub-shells • Scripts they run • Editors • Mail commands • etc. • Local variables • Only available to the current shell • set • displays all variables in the current shell • env • shows only environment variables
export • Makes a variable visible to all child processes • Form: • export ENV_VAR
Aliases • Use alternate names • "Shorthand" for commonly used commands • #alias vi='vim' • will always run vim when vi is typed • can run vi by \vi • Assign common options • #alias cp="cp -i" • will change cp to always be interactive • Ask if duplicate names found • #alias cp • will return the current assignment • #unalias cp • will get rid of the alias
Command history • Allows recalling previous commands • Shows all the previous commands with event numbers • holds about 500 events • #history n • shows last n commands • #!n • executes event n • #!n:p • prints event n (does not execute)
Tilde • Shorthand for the current users home directory • Notes: • #cd ~ • changes to current user’s home directory • #cd ~userid • changes to userid’s home directory
Using set • By default, set shows all variables • Interesting options • #set –o noclobber • prevents accidental overwriting of existing files with redirection (the > and >> symbols) • #set –o ignoreeof • prevents accidents termination of script (<ctrl>d) • #set –o notify • allows completed background jobs to notify when done
Initialization scripts • login script • runs once on log in • varies by distro • .bash_profile • .profile • .bash_login • usually in users home directory • rc script • runs every time an interactive sub-shell is created • varies by distro, usually has rc in its name • .bashrc • Use to customize the users environment • The prompt is usually set in one of these