Presentation is loading. Please wait.

Presentation is loading. Please wait.

CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced.

Similar presentations


Presentation on theme: "CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced."— Presentation transcript:

1 CSCI 330 T HE UNIX S YSTEM C Shell Programming

2 S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced “shebang”) to identify shell to be executed Examples: #! /bin/sh(defaults to bash) #! /bin/bash #! /bin/csh #! /usr/bin/tcsh Make the shell program executable Use the “chmod” command to make the program/script file executable 2 CSCI 330 - The UNIX System

3 E XAMPLE : “ HELLO ” S CRIPT #! /bin/csh echo "Hello $USER" echo "This machine is `uname -n`" echo "The calendar for this month is:" cal echo "You are running these processes:" ps 3 CSCI 330 - The UNIX System

4 E XAMPLE SCRIPT OUTPUT % chmod u+x hello %./hello Hello ege! This machine is turing The calendar for this month is February 2008 S M Tu W Th F S 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 You are running these processes: PID TTY TIME CMD 24861 pts/18 0:00 hello.csh 24430 pts/18 0:00 csh 4 CSCI 330 - The UNIX System

5 S HELL L OGIC S TRUCTURES Basic logic structures needed for program development: Sequential logic User input Decision logic Looping logic Case logic 5 CSCI 330 - The UNIX System

6 I NPUT TO A C SHELL SCRIPT Reading/prompting for user input Providing input as command line arguments Accessing contents of files 6 CSCI 330 - The UNIX System

7 R EADING USER INPUT WITH $< Use a special C shell variable: $< Reads a line from terminal (stdin) up to, but not including the new line 7 CSCI 330 - The UNIX System

8 E XAMPLE : A CCEPTING U SER I NPUT #! /bin/csh echo "What is your name?" set name = $< echo Greetings to you, $name echo "See you soon" 8 CSCI 330 - The UNIX System

9 E XAMPLE : A CCEPTING U SER I NPUT % chmod u+x greetings %./greetings What is your name? Laura Flowers Greetings to you, Laura Flowers See you soon 9 CSCI 330 - The UNIX System User entered Laura Flowers

10 C OMMAND LINE ARGUMENTS Use arguments to modify script behavior command line arguments become positional parameters to C shell script positional parameters are numbered variables: $1, $2, $3 … 10 CSCI 330 - The UNIX System

11 C OMMAND LINE ARGUMENTS Meaning $0name of the script $1, $2first and second parameter ${10}10th parameter { } prevents “$1” misunderstanding $*all positional parameters $#argvthe number of arguments 11 CSCI 330 - The UNIX System

12 E XAMPLE : C OMMAND L INE A RGUMENTS #! /bin/csh # Usage: greetings name1 name2 # Input: name1 and name2 echo $0 to you $1 $2 echo Today is `date` $1 $2 echo Good Bye $1 $2 12 CSCI 330 - The UNIX System

13 E XAMPLE : C OMMAND L INE A RGUMENTS % chmod u+x greetings %./greetings Mark Flowers./greetings to you Mark Flowers Today is Mon Feb 16 14:18:03 CST 2008 Good Bye Mark Flowers 13 CSCI 330 - The UNIX System $0 => greetings $1 => Mark $2 => Flowers

14 D ECISION LOGIC if Statement: simplest forms if ( expression ) command if ( expression ) then command(s) endif 14 CSCI 330 - The UNIX System

15 D ECISION LOGIC if-then-else Statement if ( expression ) then command(s) else command(s) endif 15 CSCI 330 - The UNIX System

16 D ECISION LOGIC if-then-else Statement if ( expression ) then command(s) else if ( expression ) then command(s) else command(s) endif 16 CSCI 330 - The UNIX System

17 B ASIC O PERATORS IN E XPRESSIONS Meaning ( )grouping !Logical “not” > >= < <=greater than, less than == !=equal to, not equal to ||Logical “or” &&Logical “and” 17 CSCI 330 - The UNIX System

18 E XPRESSION EXAMPLES if ( $1 == “next” ) echo $2 if ( $#argv != 0 ) then … endif if ( $#argv > 0 && $#argv < 5) then … endif 18 CSCI 330 - The UNIX System

19 E XAMPLE : C OMMAND L INE A RGUMENTS #! /bin/csh if ( $#argv == 0 ) then echo -n "Enter time in minutes: " @ min = $< else @ min = $1 endif @ sec = $min * 60 echo “$min minutes is $sec seconds” 19 CSCI 330 - The UNIX System

20 E XAMPLE : R EADING FILE CONTENTS #! /bin/csh # Usage: lookup nameOrNumber set list = "users.txt" if ( $#argv == 0 ) then echo -n "Enter name OR z-id: " set name = $< else set name = $* endif grep -i "$name" $list if ( $status ) echo "$name not found" 20 CSCI 330 - The UNIX System

21 F ILE T ESTING OPERATORS Syntax: if ( -opr filename ) 21 CSCI 330 - The UNIX System oprMeaning rRead access wWrite access xExecute access eExistence zZero length fOrdinary file ddirectory

22 E XAMPLE : F ILE T ESTING if ( -e $1 ) then echo $1 exists if ( -f $1 ) then echo $1 is an ordinary file else echo $1 is NOT ordinary file endif else echo $1 does NOT exist endif 22 CSCI 330 - The UNIX System

23 C S HELL LOOPING CONSTRUCTS predetermined iterations repeat foreach condition-based iterations while 23 CSCI 330 - The UNIX System

24 F IXED NUMBER ITERATIONS Syntax: repeat number command executes “command” “number” times Examples: repeat 5 ls repeat 2 echo “go home” 24 CSCI 330 - The UNIX System

25 T HE FOREACH S TATEMENT foreach name ( wordlist ) commands end wordlist is: list of words, or multi-valued variable each time through, foreach assigns the next item in wordlist to the variable $name 25 CSCI 330 - The UNIX System

26 E XAMPLE : FOREACH S TATEMENT foreach word ( one two three ) echo $word end or set list = ( one two three ) foreach word ( $list ) echo $word end 26 CSCI 330 - The UNIX System

27 L OOPS WITH FOREACH useful to process result of command, one at a time Example: #! /bin/csh @ sum = 0 foreach file (`ls`) set size = `cat $file | wc -c` echo "Counting: $file ($size)" @ sum = $sum + $size end echo Sum: $sum 27 CSCI 330 - The UNIX System

28 T HE WHILE S TATEMENT while ( expression ) commands end use when the number of iterations is not known in advance execute ‘commands’ when the expression is true terminates when the expression becomes false 28 CSCI 330 - The UNIX System

29 E XAMPLE : WHILE #! /bin/csh @ var = 5 while ( $var > 0 ) echo $var @ var = $var – 1 end 29 CSCI 330 - The UNIX System

30 E XAMPLE : WHILE #! /bin/csh echo -n "Enter directory to list: " set dirname = $< while ( ! -d $dirname ) echo "$dirname is not directory" echo -n "Enter directory to list: " set dirname = $< end ls $dirname 30 CSCI 330 - The UNIX System

31 LOOP CONTROL break ends loop, i.e. breaks out of current loop continue ends current iteration of loop, continues with next iteration 31 CSCI 330 - The UNIX System

32 LOOP CONTROL EXAMPLE #! /bin/csh while (1) echo -n "want more? " set answer = $< if ($answer == "y") echo "fine" if ($answer == "n") break if ($answer == "c") continue echo "now we are at the end" end 32 CSCI 330 - The UNIX System

33 LOOP CONTROL EXAMPLE #! /bin/csh while ( 1 ) echo -n "Enter directory to list: " set dirname = $< if ( -d $dirname ) break echo "$dirname is not directory" end ls $dirname 33 CSCI 330 - The UNIX System

34 T HE SWITCH S TATEMENT Use when a variable can take different values Use switch statement to process different cases (case statement) Can replace a long sequence of if-then-else statements 34 CSCI 330 - The UNIX System

35 T HE SWITCH S TATEMENT switch ( string ) case pattern1: command(s) breaksw case pattern2: command(s) breaksw endsw 35 CSCI 330 - The UNIX System C shell compares ‘string’ to each ‘pattern’ until it finds a match When a match is found, execute the command(s) … until breaksw

36 T HE SWITCH S TATEMENT switch (string) case pattern1: command(s) breaksw case pattern2: command(s) breaksw default: command(s) breaksw endsw 36 CSCI 330 - The UNIX System When a match is not found, execute the commands following the default label

37 E XAMPLE : SWITCH switch ($var) case one: echo it is 1 breaksw case two: echo it is 2 breaksw default: echo it is $var breaksw endsw 37 CSCI 330 - The UNIX System

38 T HE SWITCH S TATEMENT if no pattern matches and there is no default, then nothing gets executed do not omit the breaksw statement ! If you omit the breaksw statement, all the commands under the next case pattern are executed until a breaksw or endsw statement is encountered pattern may contain wildcards: *, ?, [] 38 CSCI 330 - The UNIX System

39 E XAMPLE : SWITCH GREETING #! /bin/csh # Usage: greeting name # examines time of day for greeting set hour=`date` switch ($hour[4]) case 0*: case 1[01]*: set greeting=morning ; breaksw case 1[2-7]*: set greeting=afternoon ; breaksw default: set greeting=evening endsw echo Good $greeting $1 39 CSCI 330 - The UNIX System

40 E XAMPLE C S HELL PROGRAM AVAILABLE OPTIONS ******************* [1] Display today's date [2] How many people are logged on [3] How many user accounts exist [4] Exit Enter Your Choice [1-4]: 40 CSCI 330 - The UNIX System

41 USERUTIL SHELL SCRIPT 1 OF 2 #! /bin/csh # Usage: userutil while (1) echo "AVAILABLE OPTIONS" echo "*******************" echo "[1] Display today's date" echo "[2] How many people are logged on" echo "[3] How many user accounts exist" echo "[4] Exit" echo "Enter Your Choice [1-4]:" 41 CSCI 330 - The UNIX System

42 USERUTIL SHELL SCRIPT 2 OF 2 set answer = $< switch ($answer) case "1": echo `date`; breaksw case "2": echo `users | wc -w` users are logged in breaksw case "3": echo `cat /etc/passwd | wc -l` users exists breaksw case "4": echo "BYE" break breaksw endsw end# end of while 42 CSCI 330 - The UNIX System

43 A DVANCED C S HELL P ROGRAMMING Quoting Here Debugging Trapping Signals Functions ? calling other scripts exec, source, eval 43 CSCI 330 - The UNIX System

44 Q UOTING mechanism for marking a section of a command for special processing: command substitution: `...` double quotes: “…“ single quotes: ‘…‘ backslash: \ 44 CSCI 330 - The UNIX System

45 D OUBLE QUOTES prevents breakup of string into words turn off the special meaning of most wildcard characters and the single quote $ character keeps its meaning ! history references keeps its meaning Examples: echo "* isn't a wildcard inside quotes" echo "my path is $PATH" 45 CSCI 330 - The UNIX System

46 S INGLE QUOTES wildcards, variables and command substitutions are all treated as ordinary text history references are recognized Examples: echo '*' echo '$cwd' echo '`echo hello`' echo 'hi there !' 46 CSCI 330 - The UNIX System

47 BACKSLASH backslash character \ treats following character literally Examples: echo \$ is a dollar sign echo \\ is a backslash 47 CSCI 330 - The UNIX System

48 T HE HERE C OMMAND Example: ispell -l << DONE I was running along quite nicely when I was acosted by the mail man whio insisted that my name is Raimund but I did not believe him DONE 48 CSCI 330 - The UNIX System Command SyntaxMeaning command << keywordRead lines from input until keyword is encountered at the beginning of a line

49 D EBUGGING S CRIPTS % csh –n scriptname parse commands but do not execute them % csh –v scriptname Display each line of the script before execution % csh –x scriptname Displays each line of the script after variable substitutions and before execution can also be added to shebang line ! 49 CSCI 330 - The UNIX System

50 T RAPPING S IGNALS any Unix process can be interrupted by a signal common signal: ^C typed via keyboard causes csh to terminate can be “trapped”, i.e. other behavior specified useful for cleanup upon forced exit 50 CSCI 330 - The UNIX System

51 T RAPPING SIGNAL Syntax: onintr label execution continues at label if interrupt signal is received onintr – ignore interrupt signal onintr restore previous interrupt signal behavior 51 CSCI 330 - The UNIX System

52 ONINTR E XAMPLE #! /bin/csh onintr label while (1) echo “.” sleep 1 end label: echo “signal received” 52 CSCI 330 - The UNIX System

53 D IVIDE AND CONQUER how to modularize a shell script call Unix commands and utilities call other scripts as subshell sourced in place evaluate strings to commands 53 CSCI 330 - The UNIX System

54 C ALLING OTHER SCRIPTS as subshell, via: csh scriptname scriptname subshell does not see current shell’s variables subshell sees current environment variables 54 CSCI 330 - The UNIX System

55 EXAMPLE : OUTER #! /bin/csh set var = "outer" setenv VAR "outer" echo "outer: $var $VAR" csh inner echo "outer: $var $VAR" 55 CSCI 330 - The UNIX System

56 EXAMPLE : INNER #! /bin/csh if ( ! $?var ) set var = "unknown" echo "inner: $var $VAR" set var = "inner" setenv VAR "inner" echo "inner: $var $VAR" 56 CSCI 330 - The UNIX System

57 “ SOURCE ” OTHER SCRIPT : NO SUBSHELL #! /bin/csh set var = "outer" setenv VAR "outer" echo "outer: $var $VAR" source inner echo "outer: $var $VAR" 57 CSCI 330 - The UNIX System

58 “ EXEC ” OTHER SCRIPT : NO RETURN #! /bin/csh set var = "outer" setenv VAR "outer" echo "outer: $var $VAR" exec./inner echo "outer: $var $VAR" 58 CSCI 330 - The UNIX System

59 T HE “ EVAL ” C OMMAND “eval” evaluates string executes resulting string Example: set x = 23 set y = x eval echo \$$y 59 CSCI 330 - The UNIX System

60 E XAMPLE : T HE EVAL COMMAND #!/bin/csh set A = 1 set B = 2 set C = 3 foreach i (A B C) eval echo \$$i end 60 CSCI 330 - The UNIX System


Download ppt "CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced."

Similar presentations


Ads by Google