C shell programming

Reviews
Shared by: keara
Stats
views:
194
rating:
not rated
reviews:
0
posted:
11/7/2009
language:
ENGLISH
pages:
0
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 #! /bin/sh #! /bin/bash #! /bin/csh #! /usr/bin/tcsh (defaults to bash) CSCI 330 - The UNIX System Examples:  Make the shell program executable  Use the “chmod” command to make the program/script file executable 2 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 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 CSCI 330 - The UNIX System 1 8 2 3 4 5 6 7 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 24861 pts/18 24430 pts/18 TIME CMD 0:00 hello.csh 0:00 csh 4 SHELL LOGIC STRUCTURES  Basic logic structures needed for program development: CSCI 330 - The UNIX System      Sequential logic User input Decision logic Looping logic Case logic 5 INPUT TO A C SHELL SCRIPT Reading/prompting for user input  Providing input as command line arguments  Accessing contents of files  CSCI 330 - The UNIX System 6 READING USER INPUT WITH $<  Use a special C shell variable: $< Reads a line from terminal (stdin) up to, but not including the new line CSCI 330 - The UNIX System  7 EXAMPLE: ACCEPTING USER INPUT #! /bin/csh echo "What is your name?" set name = $< echo Greetings to you, $name echo "See you soon" CSCI 330 - The UNIX System 8 EXAMPLE: ACCEPTING USER INPUT % chmod u+x greetings % ./greetings User entered What is your name? Laura Flowers Laura Flowers Greetings to you, Laura Flowers See you soon CSCI 330 - The UNIX System 9 COMMAND LINE ARGUMENTS  Use arguments to modify script behavior CSCI 330 - The UNIX System  command line arguments become positional parameters to C shell script  positional parameters are numbered variables: $1, $2, $3 … 10 COMMAND LINE ARGUMENTS $0 $1, $2 ${10} $* $#argv Meaning name of the script first and second parameter 10th parameter { } prevents “$1” misunderstanding CSCI 330 - The UNIX System all positional parameters the number of arguments 11 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 12 CSCI 330 - The UNIX System EXAMPLE: COMMAND LINE ARGUMENTS $0 => greetings $1 => Mark $2 => Flowers % 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 DECISION LOGIC  if Statement: simplest forms CSCI 330 - The UNIX System if ( expression ) command if ( expression ) then command(s) endif 14 DECISION LOGIC  if-then-else Statement CSCI 330 - The UNIX System if ( expression ) then command(s) else command(s) endif 15 DECISION LOGIC  if-then-else Statement CSCI 330 - The UNIX System if ( expression ) then command(s) else if ( expression ) then command(s) else command(s) endif 16 BASIC OPERATORS IN EXPRESSIONS () ! > >= < <= == != || && Meaning grouping Logical “not” greater than, less than equal to, not equal to Logical “or” Logical “and” 17 CSCI 330 - The UNIX System EXPRESSION EXAMPLES  if ( $1 == “next” ) echo $2 CSCI 330 - The UNIX System  if ( $#argv != 0 ) then … endif if ( $#argv > 0 && $#argv < 5) then … endif  18 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” 19 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" 20 CSCI 330 - The UNIX System FILE TESTING OPERATORS  Syntax: if ( -opr filename ) CSCI 330 - The UNIX System opr r w Meaning Read access Write access x e z f d Execute access Existence Zero length Ordinary file directory 21 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 22 CSCI 330 - The UNIX System C SHELL LOOPING CONSTRUCTS  predetermined iterations repeat foreach CSCI 330 - The UNIX System  condition-based iterations while 23 FIXED NUMBER ITERATIONS Syntax: CSCI 330 - The UNIX System repeat number command  executes “command” “number” times Examples: repeat 5 ls repeat 2 echo “go home” 24 THE FOREACH STATEMENT foreach name ( wordlist ) commands end  CSCI 330 - The UNIX System wordlist is: list of words, or multi-valued variable  each time through, foreach assigns the next item in wordlist to the variable $name 25 EXAMPLE: FOREACH STATEMENT foreach word ( one two three ) echo $word end  CSCI 330 - The UNIX System or set list = ( one two three ) foreach word ( $list ) echo $word end 26 LOOPS WITH FOREACH  useful to process result of command, one at a time CSCI 330 - The UNIX System 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 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  28 CSCI 330 - The UNIX System EXAMPLE: WHILE #! /bin/csh @ var = 5 while ( $var > 0 ) echo $var @ var = $var – 1 end 29 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 30 CSCI 330 - The UNIX System LOOP CONTROL  break ends loop, i.e. breaks out of current loop  CSCI 330 - The UNIX System continue ends current iteration of loop, continues with next iteration 31 LOOP CONTROL EXAMPLE #! /bin/csh while (1) echo -n "want more? set answer = $< if ($answer == "y") if ($answer == "n") if ($answer == "c") echo "now we are at end CSCI 330 - The UNIX System " echo "fine" break continue the end" 32 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 THE SWITCH STATEMENT Use when a variable can take different values  Use switch statement to process different cases (case statement)   CSCI 330 - The UNIX System Can replace a long sequence of if-then-else statements 34 THE SWITCH STATEMENT switch ( string ) case pattern1: command(s) breaksw case pattern2: command(s) breaksw endsw C shell compares ‘string’ to each ‘pattern’ until it finds a match CSCI 330 - The UNIX System When a match is found, execute the command(s) … until breaksw 35 THE SWITCH STATEMENT switch (string) case pattern1: command(s) breaksw case pattern2: command(s) breaksw default: command(s) breaksw endsw CSCI 330 - The UNIX System When a match is not found, execute the commands following the default label 36 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 37 CSCI 330 - The UNIX System THE SWITCH STATEMENT  if no pattern matches and there is no default, then nothing gets executed CSCI 330 - The UNIX System  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 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 39 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]: 40 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]:" 41 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 42 CSCI 330 - The UNIX System ADVANCED C SHELL PROGRAMMING Quoting  Here  Debugging  Trapping Signals  CSCI 330 - The UNIX System  Functions ? calling other scripts  exec, source, eval  43 QUOTING  mechanism for marking a section of a command for special processing: CSCI 330 - The UNIX System command substitution: `...`  double quotes: “…“  single quotes: „…„  backslash: \  44 DOUBLE QUOTES prevents breakup of string into words  turn off the special meaning of most wildcard characters and the single quote  CSCI 330 - The UNIX System $ character keeps its meaning  ! history references keeps its meaning   Examples: echo "* isn't a wildcard inside quotes" echo "my path is $PATH" 45 SINGLE QUOTES wildcards, variables and command substitutions are all treated as ordinary text  history references are recognized  CSCI 330 - The UNIX System Examples: echo '*' echo '$cwd' echo '`echo hello`' echo 'hi there !' 46 BACKSLASH  backslash character \ treats following character literally CSCI 330 - The UNIX System Examples: echo \$ is a dollar sign echo \\ is a backslash 47 THE HERE COMMAND Command Syntax command << keyword Meaning Read lines from input until keyword is encountered at the beginning of a line CSCI 330 - The UNIX System 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 DEBUGGING SCRIPTS % csh –n scriptname  parse commands but do not execute them CSCI 330 - The UNIX System % 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  TRAPPING SIGNALS any Unix process can be interrupted by a signal  common signal: ^C typed via keyboard  CSCI 330 - The UNIX System causes csh to terminate  can be “trapped”, i.e. other behavior specified  useful for cleanup upon forced exit  50 TRAPPING SIGNAL Syntax: onintr label  CSCI 330 - The UNIX System execution continues at label if interrupt signal is received onintr –  ignore interrupt signal onintr  restore previous interrupt signal behavior 51 ONINTR EXAMPLE #! /bin/csh onintr label while (1) echo “.” sleep 1 end label: echo “signal received” 52 CSCI 330 - The UNIX System DIVIDE AND CONQUER  how to modularize a shell script  call Unix commands and utilities CSCI 330 - The UNIX System  call other scripts as subshell  sourced  in place   evaluate strings to commands 53 CALLING OTHER SCRIPTS  as subshell, via: csh scriptname scriptname CSCI 330 - The UNIX System subshell does not see current shell‟s variables  subshell sees current environment variables  54 EXAMPLE: OUTER #! /bin/csh CSCI 330 - The UNIX System set var = "outer" setenv VAR "outer" echo "outer: $var $VAR" csh inner echo "outer: $var $VAR" 55 EXAMPLE: INNER #! /bin/csh CSCI 330 - The UNIX System if ( ! $?var ) set var = "unknown" echo "inner: $var $VAR" set var = "inner" setenv VAR "inner" echo "inner: $var $VAR" 56 “SOURCE” OTHER SCRIPT: NO SUBSHELL #! /bin/csh CSCI 330 - The UNIX System set var = "outer" setenv VAR "outer" echo "outer: $var $VAR" source inner echo "outer: $var $VAR" 57 “EXEC” OTHER SCRIPT: NO RETURN #! /bin/csh CSCI 330 - The UNIX System set var = "outer" setenv VAR "outer" echo "outer: $var $VAR" exec ./inner echo "outer: $var $VAR" 58 THE “EVAL” COMMAND  “eval” evaluates string  executes resulting string  CSCI 330 - The UNIX System Example: set x = 23 set y = x eval echo \$$y 59 EXAMPLE: THE 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

Related docs
Shell Programming
Views: 9  |  Downloads: 4
Shell Programming
Views: 235  |  Downloads: 11
_____ _- Shell ______ Unix
Views: 4  |  Downloads: 0
Essential C Programming
Views: 178  |  Downloads: 36
Unix System _ Shell Programming
Views: 0  |  Downloads: 0
The Unix Shell
Views: 0  |  Downloads: 0
Unix System & Shell Programming
Views: 3  |  Downloads: 0
Introduction to Shell Programming
Views: 162  |  Downloads: 10
Programming Assignment 1_ Unix Shell
Views: 1  |  Downloads: 0
Advanced Shell Programming(1)
Views: 0  |  Downloads: 0
Expert C
Views: 1490  |  Downloads: 192
linux-shell-ebook
Views: 2  |  Downloads: 1
premium docs
Other docs by keara
Istanbul Maltepe Military Hospitals Pharmacy
Views: 254  |  Downloads: 0
ISMP Survey Reveals Pharmacy Interventions
Views: 235  |  Downloads: 0
IRB Pharmacy Verification
Views: 254  |  Downloads: 0
IRB and Pharmacy Clarification
Views: 170  |  Downloads: 0
IPG
Views: 36  |  Downloads: 0
Investigational Drug Pharmacy
Views: 42  |  Downloads: 1