1 / 60

CSCI 330 The UNIX System

CSCI 330 The UNIX System. C Shell Programming. Steps to Create Shell Programs. 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

querida
Download Presentation

CSCI 330 The UNIX System

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CSCI 330The UNIX System C Shell Programming

  2. Steps to Create Shell Programs • 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 CSCI 330 - The UNIX System 2

  3. Example: “hello” Script #! /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 CSCI 330 - The UNIX System 3

  4. CSCI 330 - The UNIX System Example 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

  5. CSCI 330 - The UNIX System Shell Logic Structures • Basic logic structures needed for program development: • Sequential logic • User input • Decision logic • Looping logic • Case logic

  6. CSCI 330 - The UNIX System Input to a C shell script • Reading/prompting for user input • Providing input as command line arguments • Accessing contents of files

  7. CSCI 330 - The UNIX System Reading user input with $< • Use a special C shell variable: $< • Reads a line from terminal (stdin) up to, but not including the new line

  8. CSCI 330 - The UNIX System Example: Accepting User Input #! /bin/csh echo "What is your name?" set name = $< echo Greetings to you, $name echo "See you soon"

  9. CSCI 330 - The UNIX System Example: Accepting User Input % chmod u+x greetings % ./greetings What is your name? Laura Flowers Greetings to you, Laura Flowers See you soon User entered Laura Flowers

  10. CSCI 330 - The UNIX System Command 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 …

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

  12. CSCI 330 - The UNIX System Example: Command Line Arguments #! /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

  13. CSCI 330 - The UNIX System Example: Command Line Arguments % 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 $0 => greetings $1 => Mark $2 => Flowers

  14. CSCI 330 - The UNIX System Decision logic • if Statement: simplest forms if ( expression ) command if ( expression ) then command(s) endif

  15. CSCI 330 - The UNIX System Decision logic • if-then-else Statement if ( expression ) then command(s) else command(s) endif

  16. CSCI 330 - The UNIX System Decision logic • if-then-else Statement if ( expression ) then command(s) else if ( expression ) then command(s) else command(s) endif

  17. CSCI 330 - The UNIX System Basic Operators in Expressions Meaning ( ) grouping ! Logical “not” > >= < <= greater than, less than == != equal to, not equal to || Logical “or” && Logical “and”

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

  19. CSCI 330 - The UNIX System Example: Command Line Arguments #! /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”

  20. CSCI 330 - The UNIX System Example: Reading 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"

  21. CSCI 330 - The UNIX System File Testing operators • Syntax: if ( -opr filename )

  22. CSCI 330 - The UNIX System Example: File Testing 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

  23. CSCI 330 - The UNIX System C Shell looping constructs • predetermined iterations repeat foreach • condition-based iterations while

  24. CSCI 330 - The UNIX System Fixed number iterations Syntax: repeat number command • executes “command” “number” times Examples: repeat 5 ls repeat 2 echo “go home”

  25. CSCI 330 - The UNIX System The foreach Statement 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

  26. CSCI 330 - The UNIX System Example: foreach Statement foreach word ( one two three ) echo $word end • or set list = ( one two three ) foreach word ( $list ) echo $word end

  27. CSCI 330 - The UNIX System Loops 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

  28. CSCI 330 - The UNIX System The while Statement 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

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

  30. CSCI 330 - The UNIX System Example: 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

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

  32. CSCI 330 - The UNIX System 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

  33. CSCI 330 - The UNIX System 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

  34. CSCI 330 - The UNIX System The switch Statement • 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

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

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

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

  38. CSCI 330 - The UNIX System The switch Statement • 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: *, ?, []

  39. CSCI 330 - The UNIX System Example: 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

  40. CSCI 330 - The UNIX System Example C Shell 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]:

  41. CSCI 330 - The UNIX System 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]:"

  42. CSCI 330 - The UNIX System 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

  43. CSCI 330 - The UNIX System Advanced C Shell Programming • Quoting • Here • Debugging • Trapping Signals • Functions ? • calling other scripts • exec, source, eval

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

  45. CSCI 330 - The UNIX System Double 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"

  46. CSCI 330 - The UNIX System Single 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 !'

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

  48. CSCI 330 - The UNIX System The here Command 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

  49. CSCI 330 - The UNIX System Debugging Scripts % 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 !

  50. CSCI 330 - The UNIX System Trapping Signals • 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

More Related