tool building 1: shell cs 360 tool1. page 2 tools1 cs 360, wsu vancouver what is systems...
DESCRIPTION
Page 3 tools1 CS 360, WSU Vancouver Some Tools That System Programmers Create For a software engineering team: 4 organize versions of product sources 4 package designs & sources for peer review 4 build the product 4 test product For a web site operator: 4 update site per new look and prices 4 ensure file security in place 4... For a LAN administrator 4 add a new hire to all address books 4 install new software in all workstations 4... Such tools manipulate files and directoriesTRANSCRIPT
![Page 1: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/1.jpg)
Tool Building 1: Shell
CS 360
tool1
![Page 2: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/2.jpg)
Page 2 tools1 CS 360, WSU Vancouver
What is Systems Programming? (again)
hardware
driversOS services
system programsapplications
interfaces
users
impl
emen
tatio
n la
yers
• implementing• building• Testing• Installing• deploying
System programs typically create environments
for applications
![Page 3: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/3.jpg)
Page 3 tools1 CS 360, WSU Vancouver
Some Tools That System Programmers Create For a software engineering team:
organize versions of product sources package designs & sources for peer review build the product test product ....
For a web site operator: update site per new look and prices ensure file security in place ...
For a LAN administrator add a new hire to all address books install new software in all workstations ...
Such tools manipulatefiles and directories
![Page 4: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/4.jpg)
Page 4 tools1 CS 360, WSU Vancouver
What Does the Shell Provide? Interactive interface to all system capabilities
navigate & manipulate file system invoke system commands & programs customize your environment
Programming environment for system programmers automate above interactions glue together smaller programs prototype solutions
![Page 5: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/5.jpg)
Page 5 tools1 CS 360, WSU Vancouver
Software Structure of Unix, Again
Programs:executable files numerous & specific
Shell:command line environment few & powerful
users
shell
programs
unixlibraries
unixkernel
![Page 6: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/6.jpg)
Page 6 tools1 CS 360, WSU Vancouver
Shell Examples Find words in a file
C program: 50+ lines of code Shell: 4 lines
Find most popular word C program: 75+ lines of code Shell: 2 lines
Outline a directory structure C program alone: 100+ lines of code Shell plus C program: 30 lines
Clone a directory structure C program: 150+ lines of code Shell: 1 line
Shell can reduce code bulk dramatically
![Page 7: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/7.jpg)
Page 7 tools1 CS 360, WSU Vancouver
Use C and Shell Together
C programming = data structures + algorithms
Shell programming = file system + utilities
![Page 8: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/8.jpg)
Page 8 tools1 CS 360, WSU Vancouver
The Shell is a Scripting Language
A professional uses both language types
![Page 9: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/9.jpg)
Page 9 tools1 CS 360, WSU Vancouver
Which Shell?
Unix architecture allows arbitrary shells The most popular have evolved and become quite powerful Always avoid religious wars and become productive!
Bourne shell "SH"
C shell "CSH"
Korn shell "KSH"
GNU Born Again shell "BASH"
editors "EMACS" & "VI"
our choice
![Page 10: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/10.jpg)
Page 10 tools1 CS 360, WSU Vancouver
Basic Shell Concepts
Command Lines Pipes Useful Utilities
![Page 11: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/11.jpg)
Page 11 tools1 CS 360, WSU Vancouver
Canonical Shell Command Format
command [ -switch ] … [ argument ] ...
• file name: ../bin/doit•built-in verb: cd ..
• simple tokens: grep -e abc ../src/foo.c ../src/bar.c
•wildcards: grep -e abc ../src/*.c•quoted text: grep -e "abc xyz” ../src/*.c•shell variables grep -e “$text” ../src/*.c•quoted text: grep -e ‘$text’ ../src/*.c
your program doesn'tsee the quotes
or wildcardsor variables
• single letters: ls -a -1•combined single letters: ls -a1•values: cc -o foobar foobar.c•strange and wonderful: find . -print
![Page 12: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/12.jpg)
Page 12 tools1 CS 360, WSU Vancouver
Wildcards Expand into a List of Pathnamesls ../src/*.c ls ../src/abc.c ../src/xyz.c
These are the most common pattern characters: * matches any string of characters, including none ? matches any single character [a-z] matches any character in range ~ your home directory ~bob Bob's home directory
Notes: invoked programs don't see the patterns
but, if no matches, pattern is passed to program * doesn't match names beginning with period when first in a pattern tilde interpreted only if first character in token
![Page 13: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/13.jpg)
Page 13 tools1 CS 360, WSU Vancouver
Echo Command Writes To Stdout% echo hello therehello there% echo
% echo "this is one argument"this is one argument% echo "*"*% echo *abc def xyz% echo $PWD/home/langd% echo "$PWD"/home/langd% echo '$PWD'$PWD% x="some value"% echo "$x" $x '$x'some value some value $x
$"'
note wellthe rules for:
![Page 14: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/14.jpg)
Page 14 tools1 CS 360, WSU Vancouver
Many Utilities are Filters (Text In/Text Out)
stdin stdoutprogram
Shell always provides your program with three open file descriptors: 0: "standard input" 1: "standard output" 2: "standard error" (= stdout usually)
Examples: translate lower to upper case: tr "a-z" "A-Z" find lines with "abc": grep -e "abc" delete lines with "abc": sed -e "/abc/d" extract lines starting with "xyz": sed -n -e "/^xyz/p" sort into ascending order: sort copy input to output: cat write to output: echo "hello, world!"
![Page 15: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/15.jpg)
Page 15 tools1 CS 360, WSU Vancouver
Use Redirection to Control Stdout and Stdin Stdout:
Your terminal unless redirected:
Stdin: Your terminal unless redirected:
Stderr: Your terminal unless redirected:
% grep -e "abc" > my-output-file% grep -e "abc" >> my-output-file
% grep -e "abc" < my-input-file
% grep -e "abc" 2> my-error-file% grep -e "abc" 2> /dev/null% grep -e "abc" 2>&1% echo "error!" >&2
![Page 16: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/16.jpg)
Page 16 tools1 CS 360, WSU Vancouver
Connect Filters into Pipelines
% tr " " "\n"
% tr " " "\n" | sort
% tr " " "\n" | sort | uniq
words
sorted words
unique words
tr " " "\n"stdin sort uniq stdout
Notes: thus stdout of one program is the stdin for the following program programs in pipe execute concurrently (no temp files used) can combine with redirection
% tr " " "\n" | sort | uniq < gettysburg > result
|
![Page 17: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/17.jpg)
Page 17 tools1 CS 360, WSU Vancouver
Use Grep & Sed to Find or Change Lines Grep finds lines:
grep [ -e pattern ] … display lines in stdin that contain any of the patterns
Sed rewrites lines: sed [ -e action ] … copy stdin to stdout, doing all actions on each line
Some Sed actions: /pattern/d delete line if contains pattern /pattern/r file read (copy to stdout) file after the line the pattern
matches s/pattern/replace/g substitute replace for all occurrences of pattern
Grep & Sed patterns: . match any character [a-z] match any character from "a" to "z" [^a-z] match any character except from "a" to "z" ^ match beginning of line $ match end of line (how match a dollar sign?) pattern* match zero or more occurrences of pattern
(match is greedy -- try some experiments)
![Page 18: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/18.jpg)
Page 18 tools1 CS 360, WSU Vancouver
Some Sed Examples Replace each occurrence of MYNAME with “Dick":
Delete all lines exactly 1 character long:
% sed -e "s/MYNAME/Dick/g"
% sed -e '/^.$/d'
why the single quotes?
![Page 19: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/19.jpg)
Page 19 tools1 CS 360, WSU Vancouver
Use Scripts to Package Commands for Reuse Count number of files in directory "foo" that have "doug" in name:
A script named "hunt" to do the same thing:
A new version that accepts two parameters:
Consider these invocations of the script: new-hunt foo doug betty new-hunt foo new-hunt
% ls -1 foo | grep -e "doug" | wc -l3
ls -1 foo | grep -e "doug" | wc -l
ls -1 $1 | grep -e $2 | wc -l
% new-hunt foo "doug"3
(notice the quietness!)% hunt3
new-hunt
hunt
![Page 20: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/20.jpg)
Page 20 tools1 CS 360, WSU Vancouver
Scripts & Paths Shell finds programs by looking for executable files in the path:
File is executable if has "x" mode:
A script is a text file that is executable:
The script is just a sequence of shell commands in sequence can have parameters supports if, while, and other programming constructs
% echo $PATH.:/home/langd/bin:/net/class/cs360/bin:/usr/bin
% ls -l my-program-rwxrwxr-x ~~~~~~~~~~ my-program
% vi my-script% chmod +x my-script
("whence foo"= where foowill be found)
![Page 21: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/21.jpg)
Page 21 tools1 CS 360, WSU Vancouver
Use the Shell Utility Toolkit Basic line oriented processing:
grep find patterns sed edit lines cut extract columns sort sort lines into specified order uniq display unique lines in a sorted file tail, head display last lines of a file, or first lines wc count words, lines, and characters
File system manipulation: cp, mv, rm, ls copy, move, delete, list files chmod, chown change file access modes, file owner find navigate directory structure testing files for attributes touch change last-modified time on a file
Miscellaneous: echo echo arguments on stdout cat copy a file or files to stdout tr translate characters date echo current date and time man see manual page on a command
Scripting Languages awk process files based on rich pattern matching & text manipulation perl do the same with more C-like facilities
documentation = man pages
![Page 22: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/22.jpg)
Page 22 tools1 CS 360, WSU Vancouver
Good Things to Know Editing last command:
Type ESC Then can edit recent commands using VI keystrokes (e.g.: k = go up, i = insert)
Using special keys: End terminal stdin with control-D Interrupt execution of a program with control-C
Continuing beyond one line: End with backslash to continue line Unbalanced quotes etc. also continue Prompt will change to indicate
% hunt foo "doug>
![Page 23: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/23.jpg)
Page 23 tools1 CS 360, WSU Vancouver
Whiteboard Exercises
Examples of scripts and pipelinesI love Unix
![Page 24: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/24.jpg)
Page 24 tools1 CS 360, WSU Vancouver
Some Word Scripts
This is a example docment, with some words.This is on line two (which follows line 1).This is on line three (which follows line 2.0).John siad, "Hello, world!".
test file "document1":
Note: following scripts are stored in the directory "/class/cs360/lab/tools1/words"
• extract words• find misspelled words• find most popular word
![Page 25: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/25.jpg)
Page 25 tools1 CS 360, WSU Vancouver
Words0:
tr " " "\n"
% words0 < document1Thisisaexampledocment,withsomewords.Thisisonlinetwo(whichfollowsline1).Thisis... more follows ...
script:
operation:
goal:• display words
preparation:
% vi words1% chmod +x words0
words0
![Page 26: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/26.jpg)
Page 26 tools1 CS 360, WSU Vancouver
Words1:
tr " " "\n" | sort | uniq
% words1 < document1"Hello,(which1).2.0).JohnThisadocment,examplefollowsislineonsiad,somethreetwowithwords.world!".
script:
operation:
goal:• display unique words
preparation:
% vi words1% chmod +x words1
words1
![Page 27: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/27.jpg)
Page 27 tools1 CS 360, WSU Vancouver
Words2:
tr " " "\n" | \tr "A-Z" "a-z" | \sort | \uniq
% words2 < document1"hello,(which1).2.0).adocment,examplefollowsisjohnlineonsiad,somethisthreetwowithwords.world!".
script:
operation:
goal:• display unique words• treat upper case as lower case
preparation:
% vi words2% chmod +x words2
words2
![Page 28: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/28.jpg)
Page 28 tools1 CS 360, WSU Vancouver
Words3:
tr "\$,;./!()'\"" " " | \tr -s " " "\n" | \tr "A-Z" "a-z" | \sort | \uniq
% words3 < document1
012adocmentexamplefollowshelloisjohnlineonsiadsomethisthreetwowhichwithwordsworld
script:
operation:
goal:• display unique words• treat upper case as lower case• treat punctuation as space• collapse spans of spaces
preparation:
% vi words3% chmod +x words3
words3
![Page 29: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/29.jpg)
Page 29 tools1 CS 360, WSU Vancouver
Spell:
words3 > /tmp/$$
comm -23 /tmp/$$ /usr/share/dict/words
rm /tmp/$$
% spell < document1012docmentfollowsjohnsiadwords
script:
operation:
goal:• display words that are not in dictionary
preparation:
% vi spell% chmod +x spell
spell
![Page 30: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/30.jpg)
Page 30 tools1 CS 360, WSU Vancouver
Popular
tr "\$,;./!()'\"" " " | \tr -s " " "\n" | \tr "A-Z" "a-z" | \sort | \uniq -c | \sort -nr | \head -1
script:
goal:• find words using words3 logic• sort words by number of occurrences• print most popular word
% popular < document14 lineoperation:
popular
![Page 31: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/31.jpg)
Page 31 tools1 CS 360, WSU Vancouver
Clone a Directory Structure
cp -mr $1 $2
script:
goal:• copy file or directory recursively• preserve ownership, modes, and times
% clone /home/langd /backup
operation:
preparation:
% vi clone% chmod +x clone
clone
![Page 32: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/32.jpg)
Page 32 tools1 CS 360, WSU Vancouver
Outline a Directory Structure
% find foo -type dfoofoo/binfoo/labfoo/lab/introfoo/lab/intro/my-directoryfoo/lab/dev1foo/lab/iofoo/demofoo/demo/afoo/demo/bfoo/hellofoo/examplefoo/example/onefoo/example/twofoo/example/two/three
"find" walks directories:
(lots of wonderful switches!)
% outline foofoo /bin /lab /intro /my-directory /dev1 /io /demo /a /b /hello /example /one /two /three
What we want:
We will create this using a small program that replaces text to left of slashes with blanks
![Page 33: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/33.jpg)
Page 33 tools1 CS 360, WSU Vancouver
Outline a Directory Structure
find $1 -type d | unslash
script:% outline foofoo /bin /lab /intro /my-directory /dev1 /io /demo /a /b /hello /example /one /two /three
goal:• outline a directory structure
preparation:
% vi outline% chmod +x outline% vi unslash.c% cc -o unslash unslash.c
operation:
outline
![Page 34: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/34.jpg)
Page 34 tools1 CS 360, WSU Vancouver
Implementation of Unslash Outline the logic:
read stdin lines– if not the first line:
overwrite with blanks all text to left of rightmost slash– write the line
return
Refine the logic: key variables:
– let "line" be an array that holds the line just read– let i index each character in line– let s index the rightmost slash or -1 if no slash
to do the overwriting:– set s by examining each character (left-to-right)– replace each line[0..s-1] with a blank
Translate logic into C next slide ...
0 1 2 3 4 5 6 7 8 9 10line before / a b / c / x y . z \0
s 5line after / x y . z \0
![Page 35: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/35.jpg)
Page 35 tools1 CS 360, WSU Vancouver
Code for Unslash is Simple#include "lineio.h"#define LINEMAX 1000
int main (int argc, char *argv[]) {
char line[LINEMAX]; /* input line & work area */int n; /* number of line 0, 1, ... */int i; /* examine line[i] next */int s; /* line[s] is a slash or s == -1 */
n = 0;while (getline (line)) {
/* overwrite text, if not first line */if (n > 0) {
/* set s to index of rightmost slash or to -1 */i = 0; s = -1;while (line[i] != '\0') {
if (line[i] == '/') s = i;++i;
}
/* replace line[0..s-1] with blanks */i = 0;while (i < s) {
line[i] = ' ';++i;
}}
/* write line and increment n */putline (line);++n;
}}
note how we find rightmost
slash
unslash.c
![Page 36: Tool Building 1: Shell CS 360 tool1. Page 2 tools1 CS 360, WSU Vancouver What is Systems Programming? (again) hardware drivers OS services system programs](https://reader035.vdocuments.site/reader035/viewer/2022062905/5a4d1ad37f8b9ab05997239d/html5/thumbnails/36.jpg)
Page 36 tools1 CS 360, WSU Vancouver
Discussion ... In this situation:
by using a Shell utility, we had an "almost" solution immediately by reformulating the problem as a filter, we could write a simple C program to
complete the solution
This is a general approach for tool building with the shell:
1. Use files and directories2. Use utilities whenever possible3. Fill gaps with small C programs4. Connect components with pipes5. Format data as text