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

Slides:



Advertisements
Similar presentations
EcoTherm Plus WGB-K 20 E 4,5 – 20 kW.
Advertisements

Números.
Trend for Precision Soil Testing % Zone or Grid Samples Tested compared to Total Samples.
AGVISE Laboratories %Zone or Grid Samples – Northwood laboratory
Trend for Precision Soil Testing % Zone or Grid Samples Tested compared to Total Samples.
PDAs Accept Context-Free Languages
ALAK ROY. Assistant Professor Dept. of CSE NIT Agartala
EuroCondens SGB E.
Worksheets.
Slide 1Fig 26-CO, p.795. Slide 2Fig 26-1, p.796 Slide 3Fig 26-2, p.797.
Slide 1Fig 25-CO, p.762. Slide 2Fig 25-1, p.765 Slide 3Fig 25-2, p.765.
& dding ubtracting ractions.
Sequential Logic Design
Copyright © 2013 Elsevier Inc. All rights reserved.
David Burdett May 11, 2004 Package Binding for WS CDL.
Create an Application Title 1Y - Youth Chapter 5.
Add Governors Discretionary (1G) Grants Chapter 6.
CALENDAR.
CHAPTER 18 The Ankle and Lower Leg
ASCII stands for American Standard Code for Information Interchange
The 5S numbers game..
A Fractional Order (Proportional and Derivative) Motion Controller Design for A Class of Second-order Systems Center for Self-Organizing Intelligent.
Numerical Analysis 1 EE, NCKU Tien-Hao Chang (Darby Chang)
Welcome. © 2008 ADP, Inc. 2 Overview A Look at the Web Site Question and Answer Session Agenda.
Break Time Remaining 10:00.
The basics for simulations
Numerical Analysis 1 EE, NCKU Tien-Hao Chang (Darby Chang)
Factoring Quadratics — ax² + bx + c Topic
MM4A6c: Apply the law of sines and the law of cosines.
Regression with Panel Data
Dynamic Access Control the file server, reimagined Presented by Mark on twitter 1 contents copyright 2013 Mark Minasi.
Copyright © 2012, Elsevier Inc. All rights Reserved. 1 Chapter 7 Modeling Structure with Blocks.
Progressive Aerobic Cardiovascular Endurance Run
Biology 2 Plant Kingdom Identification Test Review.
Adding Up In Chunks.
FAFSA on the Web Preview Presentation December 2013.
RH030 Linux Computing Essentials
MaK_Full ahead loaded 1 Alarm Page Directory (F11)
Facebook Pages 101: Your Organization’s Foothold on the Social Web A Volunteer Leader Webinar Sponsored by CACO December 1, 2010 Andrew Gossen, Senior.
When you see… Find the zeros You think….
2011 WINNISQUAM COMMUNITY SURVEY YOUTH RISK BEHAVIOR GRADES 9-12 STUDENTS=1021.
Before Between After.
2011 FRANKLIN COMMUNITY SURVEY YOUTH RISK BEHAVIOR GRADES 9-12 STUDENTS=332.
Slide R - 1 Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Prentice Hall Active Learning Lecture Slides For use with Classroom Response.
Subtraction: Adding UP
1 Non Deterministic Automata. 2 Alphabet = Nondeterministic Finite Accepter (NFA)
Figure 10–1 A 64-cell memory array organized in three different ways.
Types of selection structures
Static Equilibrium; Elasticity and Fracture
Resistência dos Materiais, 5ª ed.
& dding ubtracting ractions.
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 13 Pointers and Linked Lists.
1.step PMIT start + initial project data input Concept Concept.
WARNING This CD is protected by Copyright Laws. FOR HOME USE ONLY. Unauthorised copying, adaptation, rental, lending, distribution, extraction, charging.
A Data Warehouse Mining Tool Stephen Turner Chris Frala
1 Dr. Scott Schaefer Least Squares Curves, Rational Representations, Splines and Continuity.
Chart Deception Main Source: How to Lie with Charts, by Gerald E. Jones Dr. Michael R. Hyman, NMSU.
Outlook 2013 Web App (OWA) User Guide Durham Technical Community College.
1 Non Deterministic Automata. 2 Alphabet = Nondeterministic Finite Accepter (NFA)
Introduction Embedded Universal Tools and Online Features 2.
CIS 240 Introduction to UNIX Instructor: Sue Sampson.
Schutzvermerk nach DIN 34 beachten 05/04/15 Seite 1 Training EPAM and CANopen Basic Solution: Password * * Level 1 Level 2 * Level 3 Password2 IP-Adr.
Chapter 9: The TC Shell Everything you thought you knew is now wrong.
Lecture 3  Shell Variables  Shell Command History  Job / Process Control  Directory Control.
Introduction to Unix – CS 21 Lecture 9. Lecture Overview Shell description Shell choices History Aliases Topic review.
Adv. UNIX:CShell/71 Advanced UNIX v Objectives of these slides: –introduce the C Shell –concentrate on features not in the Bourne Shell (but many.
1 © 2012 John Urrutia. All rights reserved. Chapter 09 The TC Shell.
Shell Programming.
Presentation transcript:

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

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) $ ! (execute event no. ) $ !3 $ ! (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: !!, !, ! 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 : " \! 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 igor is 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] $ date & [2] Fri Jun 6 16:56:11 GMT [2] Done date $ gcc big.c & [2] 26041

17 $ jobs [1] - Runningspell glossary.out > glo [2] + Runninggcc 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 $ cat trig1A.txt

24 Control-D for help $ ls h* help.hist help.text help.trig.01 $ cat h $cat help. help.hist help.text help.trig.01 $ cat help. sometimes

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

26 $ 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 adv-unix cops_104 push the directory onto the stack and do a cd ~

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

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

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

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 $name fred $ set (list set variables) $ unset name (delete name var)

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

35 Arrays of String Vars $ set colours = (red green blue orange) $ echo $colours red 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 command for variables holding numbers. count = 0 (or set count = 0 ) $ echo $count 0 count = ( ) $ echo $count 7 result = ( $count < 5 ) $ echo $result 0 Remember the space after

39 count = $count + 5 $ echo $count 12 Could write: count += 5 count++ $ echo $count 13

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

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

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 $#days 5 $ echo $?days 1 $ unset days $ echo $?days 0 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 set or 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 users 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

51 When a shell script is called, the shell will execute the cshrc scripts first. The cshrc scripts are also executed whenever a new window is created in a X- Windows session.

52 Examples $ cat.login setenv TERM vt100 stty erase ^X kill ^U -lcase -tabs echo This is who is on the machine: who

53 $ cat.cshrc set noclobber set ignoreof set history = 100 set prompt = ! % set PATH = (/usr/bin /usr/ucb /bin ~/bin) alias h history alias ll ls -lg Only set is needed (not setenv ), since.cshrc is executed at the start of every script.

54 $ cat.logout echo Switch off the air-conditioner sleep 10

55 Script Programming Executing a C Shell Script Branching Looping Recursion Interrupt Handling

56 Executing a C Shell Script Put #!/bin/csh as the first line may need #!/bin/csh -f to switch off the default initial execution of the cshrc scripts Or execute: $ csh script Or make csh your default shell.

57 Branching if-then File Test Expressions Switch

58 if-then Formats: if (expression) then commands endif if (expression) then commands else commands endif

59 if (expression) then commands else if (expression) then commands : else commands endif

60 $ cat if_else1 #!/bin/csh -f # Set class depending on argument value set number = $argv[1] if ($number = 0 && $number = 100 && $number < class = 2 class = 3 endif echo The number $number is in class $class

61 Usage Due to the #!/bin/csh line, the script can be executed from the Bourne/Bash command line: $ if_else1 55 The number 55 is in class 1 $

62 File Test Expressions These occur in the expression part of if- then and other control structures. -d filefile is a directory -f filefile is a file -e filefile exists -z filefile is 0 bytes long -r filefile is readable -w file writable -x file executable

63 Switch Format: switch (string variable) case pattern: commands breaksw case pattern: commands breaksw : default: commands breaksw endsw

64 Example $ cat switch_1 #!/bin/csh -f # See if first argument is yes or no. # Deal with a mix of upper and lower case. # Does argv[1] exist? if ($#argv == 0) then echo Usage: switch_1 [yes | no] exit 1 endif : Usage: $ switch_1 yes Argument 1 is yes $

65 switch ($argv[1]) case [yY][eE][sS]: echo Argument 1 is yes breaksw case [nN][oO]: echo Argument 1 is no breaksw default: echo Argument 1 is neither yes or no breaksw endsw

66 Looping Foreach While

67 foreach Format: foreach loop-index (argument-list) commands end

68 Example 1 $ cat refname #!/bin/csh -f # Usage: rename arg1 arg2 # # Changes the string arg1 to arg2 # in the filenames of every file in # the current working directory. if ($#argv != 2) then echo Usage: refname arg1 arg2 exit 1 endif : Usage: $ refname CPP C

69 foreach i (ls) set newname = echo $i | sed s/$1/$2/ mv $i $newname end The text in i that matches $1 is changed to $2 VERY DANGEROUS

70 $ cat foo-six #!/bin/csh -f # Assign up to 6 command line args # to the buffer array. Execute foo # with buffer as its arguments set buffer = ( count = 1 if ($#argv > 6) then echo Usage: foo-six [up to 6 args] exit 1 endif : Example 2 Usage: $ foo-six a b c

71 foreach arg ($argv[*]) set buffer[$count] = count++ end echo There were $count arguments exec foo $buffer[*] exit 0 expands to $argv[0], $argv[1], etc. expands to $buffer[0], $buffer[1], etc. VERY DANGEROUS

72 while Format: while (expression) commands end

73 $cat while_1 # Sum the numbers between 1 and # the value in limit = index = sum = 0 while ($index <= sum += index++ end echo The sum is $sum Example Usage: $ while_1 20 The sum is 210

74 Recursion The script cppc visits every directory below the one supplied as its argument and renames any files ending with.CPP to end with.c e.g. foo.CPP --> foo.c usage: $ cppc code/ cppc could be implemented with find

75 cppc #!/bin/csh -f # cppc replace all.CPP extensions with.c if ($#argv != 1) then echo Usage: $0 directory exit(1) endif foreach file ($1/*) # files in directory if (-f $file) then if ($file:e == CPP) then mv $file $file:r.c echo Modifying $file to $file:r.c endif else if (-d $file) then $0 $file# recursive call endif end VERY DANGEROUS

76 Notes Pulling apart a filename that has an extension (e.g. foo.bar ) $ set var = foo.bar $ echo var:r # name without extension foo $ echo var:e # just the extension bar

77 A Standard Shape Most recursive scripts have the following 'shape': foreach file ($1/*) # files in directory if (-f $file) then # do something to the file else if (-d $file) then $0 $file# recursive call endif end

78 Title Words in Web files The wtitle script examines each.html file in the directories below the one supplied as its argument. If outputs the title words on each Web page e.g if it sees: My Home Page then it prints: My Home Page

79 wtitle #!/bin/csh -f # wtitle: list the title words in HTML files if ($#argv != 1) then echo Usage: $0 directory exit(1) endif foreach file ($1/*) if ((-f $file) && ($file:e == html)) then grep -i title $file | \ awk -F\> {print $2} | \ awk -F\< {print $1} | \ tr \n | tr A-Z a-z else if (-d $file) then $0 $file# recursive call endif end

80 Notes grep -i title $file gets a title tag line: My Home Page awk -F\> {print $2} separates the line using > and prints the second part: My Home Page awk -F\< {print $1} separates the line using < and prints the first part: My Home Page

81 Usage $ wtitle caine/ michael caine caine picture caine : $ wtitle caine/ | sort | uniq caine michael picture : sorted and duplicates removed

82 Interrupt Handling Not as good as Bourne only interrupt is supported the control flow is hard to understand much improved in tcsh Format: onintr label The script must have a line: label:

83 $ cat onintr_1 #!/bin/csh -f onintr close while (1) echo Program is running. sleep 2 end close: echo End of Program Usage: $ onintr_1 Program is running Program is running : : End of Program ctrl-C typed

84 The End Practice writing scripts in different shells You will figure out that environments support a subset of commands from the others. Bourne is still the default and most popular for most linux distributions.