advanced unix n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Advanced UNIX PowerPoint Presentation
Download Presentation
Advanced UNIX

play fullscreen
1 / 84

Advanced UNIX

145 Views Download Presentation
Download Presentation

Advanced UNIX

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. Advanced UNIX The C Shell • Objectives of these slides: • Introduce the C Shell • Concentrate on features not in the Bourne Shell (but many are in Bash)

  2. Background • Originally part of Berkeley UNIX • More tolerant of mistakes than Bourne • e.g. can avoid accidental logouts, overwrites • Easier to configure • e.g. alias, history, job control • Some scripting improvements over Bourne: • better variables, arrays, expressions

  3. Almost all the good ideas from the C Shell have been added to Bash: • e.g. history, aliases, job control, directory stacks

  4. Entering & leaving the C Shell • Check your default shell with ps • Change shell using chsh or type csh • Exit with: exit, logout(control-D maybe) csh is actually tcsh on most Linux versions

  5. History • A list of recently used command lines (events) that can be reused. • $ set history = 25 (record 25 events)$ set savehist = 20 (remember 20 events after logout)$ history (see history list)

  6. Using the history list • $ !! (execute last event) • $ !<number> (execute event no. <number>) $ !3 • $ !<initial-text> (execute most recent command that starts with initial-text) $ !gcc $ !loc

  7. Bash History • history [ number ] • lists the last number commands! • Bash supports the same history list features: • !!, !<number>, !<text> • Relevant environment variables: • HISTFILE=/home/ad/.bash_history • HISTFILESIZE=500 • HISTSIZE=500

  8. In Bash, you can modify the prompt to include the history number. • Inside .bashrc: PS1="\!.\u@\h$ " \! includes the history number

  9. Alias • Define new commands by using string substitution. • Format: $ alias new-command executed-command(s) • e.g. $ alias ll ls -lg$ ll

  10. Examples • $ alias ls ls -lg • $ alias mi mv -i • $ alias who ’who ; date’ redefining commands is okay

  11. Argument Substitution • \!^the first argument of the new command • \!*all the arguments of the new command • $ alias wid ’who | fgrep \!^’ • $ wid igoris the same as:$ who | fgrep igor

  12. Check your aliases • $ alias (list the current aliases) • $ alias hd (check hd alias) • $ unalias hd (cancel hd alias) • $ \ls (use original meaning of ls)

  13. Bash Alias • Bash alias works the same way at the command line as in csh: alias, unalias, \command • Defining an alias in .bashrc is different: alias name = value • alias ls='/bin/ls -F' • alias ll='ls -l' • alias h="history 30"

  14. Aliases that require multiple commands or arguments are defined as functions: sgrep(){ ps aux | grep $1 | grep -v grep}cs(){ cd $1 ls}

  15. Job Control • Move commands between foreground and background; suspend commands. • Each background job has a PID and a job number.

  16. Example • $ spell glossary > glossary.out &[1] 26025$ date &[2] 26028Fri Jun 6 16:56:11 GMT+7 2000[2] Done date$ gcc big.c &[2] 26041

  17. $ jobs[1] - Running spell glossary.out > glo[2] + Running gcc big.c • Other status messages: • Stopped • Stopped (tty input) • Done

  18. Background to Foreground • $ fg %job-number • Example: $ fg %2

  19. Foreground to Background • $ control-Z (suspends job and puts it into the background) • $ bg (resumes the job) • $ bg %job-number (resumes job-number)

  20. Stopping • $ stop %job-number • $ kill %job-number (kills job-number) • A job stopped for tty input must be brought to the foreground (with fg).

  21. State Change • The C Shell prints a message at the next prompt when the state of a job changes. • Use notify to make the shell report a change immediately: $ notify %job-number

  22. Home Directory Short Forms • ~ (your home directory) • ~name (home directory of name) e.g. ~ad • Use: $ cp idea.txt ~ $ ls ~ad/teach

  23. Filename Completion • $ set filec (‘switch on’ file completion) • $ cat trig1A <press esc>$ cat trig1A.txt

  24. Control-D for help sometimes <tab> • $ ls h*help.hist help.text help.trig.01 • $ cat h <press esc>$cat help. <beep><press control-D>help.hist help.text help.trig.01$ cat help.

  25. adv-unix ~ Directory Stacks • Store a list of directories you are using on a stack. • Switch between directories by referring to the stack. cops_104

  26. adv-unix push the directory onto the stack and do a cd • $ pwd/home/ad/$ pushd ~/teach/adv-unix~/teach/adv-unix ~$ pwd/home/ad/teach/adv-unix$ pushd ~/cops_104~/cops_104 ~/teach/adv-unix ~$ pwd/home/ad/cops_104 cops_104 ~ ~

  27. adv-unix cops_104 ~ Change directories quickly push the top directory down and do a cd • $ pushd~/teach/adv-unix ~/cops_104 ~$ pwd/home/ad/teach/adv-unix/

  28. adv-unix ~ push the top directory down and do a cd • $ pushd~/cops_104 ~/teach/adv-unix ~$ pwd/home/ad/cops_104 cops_104

  29. adv-unix ~ Popd pop the top directory and cd to the new top • $ popd~/teach/adv-unix ~$ pwd/home/ad/teach/adv-unix/

  30. Other Stack Commands • $ dirs (lists the directories on the stack) • $ pushd +number • move the directory in position number to the top (0), and cd to that directory • the stack is numbered 0, 1, 2, ...

  31. $ popd +number • pop off the directory at position number • if number is not 0 then there is no change to the present directory

  32. Variables ( 4 types) String Variables Numerical Variables Special Forms of User Variables Shell Variables

  33. String Variables • $ set name = fred (include spaces in older csh's)$ echo $namefred$ set (list set variables)$ unset name (delete name var)

  34. setenv (environment vars) no = • $ setenv name fred$ echo $namefred$ setenv$ unsetenv name • setenv makes the variable visible to any scripts called from the shell (or from the script containing the setenv).

  35. Arrays of String Vars • $ set colours = (red green blue orange)$ echo $coloursred green blue orange$ echo $colours[3]blue$ echo $colours[2-4]green blue orange

  36. $ set shapes = (’’ ’’ ’’ ’’ ’’)$ echo $shapes$ set shapes[4] = square$ echo $shapes[4]square

  37. Braces • Use {...} to distinguish a variable from surrounding text. • $ set prefix = Alex$ echo $prefix is short for{$prefix}ander.Alex is short for Alexander. • Can also write $prefix{ander}

  38. Numeric Variables • Use the @ command for variables holding numbers. • $ @ count = 0 (or set count = 0)$ echo $count0$ @ count = ( 5 + 2 )$ echo $count7$ @ result = ( $count < 5 )$ echo $result0 Remember the space after the @

  39. $ @ count = $count + 5$ echo $count12 • Could write: $ @ count += 5 • $ @ count++$ echo $count13

  40. Operators • Most of the C numerical operators: • Arithmetic: + - * / % • Relational: > < >= <= != == • Logical: && || ! • etc.

  41. Arrays of Numeric Vars • $ set ages = (0 0 0 0 0)$ @ ages[2] = 15$ @ ages[3] = ( $ages[2] + 4 )$ echo $ages[3]19$ echo $ages0 15 19 0 0

  42. Bourne Shell Equivalents • The Bourne Shell only has string variables. • It uses expr to switch string variables into numbers: $ number=5 (Bourne)$ number=‘expr $number + 2‘ $ @ number = 5 (C Shell)$ @ number = $number + 2

  43. Special Forms of User Variables • $#VAR (returns number of elements in VAR array) • $?VAR (returns 1 if VAR is declared; 0 otherwise)

  44. $ set days = (mon tues wed thurs fri)$ echo $#days5$ echo $?days1$ unset days$ echo $?days0 days is declared days is not declared

  45. Shell Variables • Shell variables can be initialized in three ways: • by the shell • by the environment • by the user with setor setenv

  46. There are two types of shell variable: • shell variables that take values; • shell variables that act as switches • they have the value 0 or 1

  47. Shell Vars that take Values • $argv[0] or $0 command name • $argv[1] or $1 first argument of command • Also $2,$3,... • no upper limit; no need for shift • $argv[*] or $* array of all arguments • $#argv number of arguments

  48. $HOME pathname to user’s home directory • $PATH array of pathnames to commands $ setenv PATH (/usr/bin /usr/ucb /bin ~/bin) • $status exit status of last command • etc...

  49. Shell Vars that act as Switches • $filec turns on file completion • $ignoreeof disables ctrl-D as logout • $noclobber stops file overwriting with > • $notify immediate notification about background job changes • etc... Use: $ set ignoreeof

  50. Automated Scripts • At login, the C Shell executes a range of scripts automatically: • /etc/csh.login, /etc/csh.cshrc • .login in your home directory • .cshrc in your home directory • At logout, it executes: • /etc/csh.logout • .logout in your home directory