Download presentation
Presentation is loading. Please wait.
Published byDamian Casey Modified over 9 years ago
1
Unix Comp-145 L ECTURE 8: S HELL P ROGRAMMING B ASED ON : S. D AS, “Y OUR U NIX : T HE ULTIMATE G UIDE ”, 2 ND E DITION, M C G RAW H ILL, 2006 (C HAPTER 13) BROOKDALE COMMUNITY COLLEGE111/19/2009 rwj
2
BROOKDALE COMMUNITY COLLEGE2 S HELL P ROGRAMMING P ROCESSING F LOW C ONTROL IN S HELL S CRIPTS L OOP E XECUTION IN S HELL S CRIPTS A RITHMETIC C OMPARATIVE T ESTS IN S HELL S CRIPTS D EBUGGING S HELL S CRIPTS C ONCEPTS IN S HELL P ROGRAM D ESIGN T ECHNIQUES 11/19/2009 rwj
3
BROOKDALE COMMUNITY COLLEGE3 Naming Shell Scripts S CRIPT NAME IS ARBITRARY C HOOSE NAMES THAT MAKE IT EASY TO QUICKLY IDENTIFY FILE FUNCTION U SING. SH AS AN EXTENSION TO DENOTE SHELL SCRIPT FILES DOESN ' T MAKE THE SCRIPT EXECUTABLE – Example: quartery_report.sh U SE chmod +x TO MAKE SHELL SCRIPT EXECUTABLE T O EXECUTE IN CURRENT DIRECTORY USE./script.sh if script.sh has u= rwx 11/19/2009 rwj
4
S CRIPTING I NTERNALS M AKE S CRIPT I NTERACTIVE : R EAD – Enables script to take input from user. M AKE SCRIPT N ON -I NTERACTIVE : P IPES AND R EDIRECTION – Use positional parameters – Parameter values input from Command Line when launched – In script input variables referred to a %1, %2, etc # INDICATES CHARACTERS TO ITS RIGHT ON THIS LINE IS TO BE IGNORED, I. E., A COMMENT BROOKDALE COMMUNITY COLLEGE411/19/2009 rwj
5
BROOKDALE COMMUNITY COLLEGE5 S CRIPTING I NTERNALS I NTERACTIVE S CRIPT EXAMPLE : $ echo “Enter pattern to be searched: \c” # \c = no newline $ read var1 $ echo “Enter file to be used: \c” $ read var2 $ echo “Searching for $var1 from file $var2” $ grep “$var1” $var2 N ON -I NTERACTIVE S CRIPT EXAMPLE : $ echo “Program: $0” # $0 always = script name $ echo “The number of arguments specified is $#” $ echo “The arguments are $*” # all arguments stored in $* $ grep “$1” $2 $ echo “\nJob Over”
6
BROOKDALE COMMUNITY COLLEGE6 E XIT STATUS –E XIT - DEFAULT VALUE IS 0 –E XIT 0- T RUE, EVERYTHING OK –E XIT 1- F ALSE, ERROR ENCOUNTERED –$?- S TORES EXIT STATUS OF LAST COMMAND W RITER OF SCRIPT DETERMINES SEMANTICS OF SUCCESS –E XAMPLE, N OT F OUND COULD BE EXCEPTION OR DESIRED RESULT S CRIPTING I NTERNALS 11/19/2009 rwj
7
BROOKDALE COMMUNITY COLLEGE7 O PERATORS && AND || RECOMMENDED FOR SIMPLE DECISIONS CMD 1 && CMD 2# CMD 2 EXECUTED IF CMD 1 SUCCEEDS CMD 1 || CMD 2# CMD 2 EXECUTED IF CMD 1 FAILS E XAMPLES : $ grep ‘manager’ foobar || echo “Pattern not found” $ grep “$1” $2 || exit 2 # Quit script if search fails $ echo “Patern found, Job over” #executed only if grep succeeds S CRIPTING I NTERNALS : L OGICAL O PERATORS 11/19/2009 rwj
8
BROOKDALE COMMUNITY COLLEGE8 If, then, else CONDITIONAL CONSTRUCTS – T ESTS COMMAND EXIT STATUS – if REQUIRES A then AND fi ENDING – if ! Command - T EST IS NOT TRUE OR SUCCESSFUL S CRIPTING I NTERNALS : L OGICAL O PERATORS if command is true # successful? then excute commands else fi if command is true # successful? then excute commands else excute commands fi if command is true # successful? then excute commands elif command is true then excute commands else excute commands fi A. B. C. if command is true; then... fi D. 11/19/2009 rwj
9
BROOKDALE COMMUNITY COLLEGE9 E XAMPLE FROM TEXT S CRIPTING I NTERNALS : L OGICAL O PERATORS if grep “[: ]$1[: ]” /etc/passwd # successful? then echo “Pattern found – Job over” else echo “Pattern not found” fi $ chmod 744 ifthen.sh $ ifthen.sh Mensing $ pico ifthen.sh
10
BROOKDALE COMMUNITY COLLEGE10 U SING test AND [ ] TO EVALUATE EXPRESSIONS IN CONDITIONAL CONSTRUCTS – R ELATIONAL T ESTS test RETURNS EXIT STATUS ONLY - USE WITH CONSTRUCTS THAT CAN OPERATE ON AN EXIT STATUS. C OMPARE 2 NUMBERS test $x –gt $y C OMPARE 2 STRINGS OR A SINGLE STRING FOR A NULL VALUE test $x != $y OR if [!-n “$option”] C HECK A FILE ’ S ATTRIBUTES if [-f !-r $1]; then S CRIPTING I NTERNALS : L OGICAL O PERATORS 11/19/2009 rwj
11
BROOKDALE COMMUNITY COLLEGE11 C OMPARE 2 NUMBERS -eq Equal to -ne Not Equal to -gt Greater than -ge Greater or equal to -lt Less than -le Less or equal to Example: $ x=5; y=7; z=7.4 $ test $x –eq $y; echo $? $ 1 -- test returns not true S CRIPTING I NTERNALS : L OGICAL O PERATORS 11/19/2009 rwj
12
BROOKDALE COMMUNITY COLLEGE1211/19/2009 rwj C OMPARE 2 STRINGS = Equal to != Not Equal to -n string String not NULL -z string String is a NULL string String String is assigned and not NULL == Strings equal? (only in Korn and Bash Shell) Example: $ if [“$option” = “y”]; then # tests input equality $ if [-z “$option”]; then # tests input for NULL string S CRIPTING I NTERNALS : L OGICAL O PERATORS
13
11/19/2009 rwjBROOKDALE COMMUNITY COLLEGE13 F ILE ATTRIBUTE TESTS -- SEE TABLE 13.4 FOR FULL LIST -f fName fName exist and is a regular file? -r fName fName exist and is readable? -x fName fName exist and is readable? -s fName fName exist and is its size greater than 0? !-s fName fName exist and is its size not greater than 0? Example: if [-s $1]; then # tests input file exists and size > 0 S CRIPTING I NTERNALS : L OGICAL O PERATORS
14
11/19/2009 rwjBROOKDALE COMMUNITY COLLEGE14 U SING if AND test IN C OMPOUND C ONDITIONS – 2 FORMS o U SING && AND || TOGETHER WITH OTHER OPERATORS if [“$0” = “lm”]||[“$0” = “./lm”]; then o U SING -a AND -o TOGETHER WITH OTHER OPERATORS if [“$0” = “lm”] -o [“$0” = “./lm”]; then S CRIPTING I NTERNALS : L OGICAL O PERATORS
15
BROOKDALE COMMUNITY COLLEGE15 U SING case STATEMENTS ( INSTEAD OF IF, THEN, ELSE ) o T ESTS THE VALUE OF AN EXPRESSION WITH EACH ALTERNATIVE o U SES A CONSTRUCT TO MATCH A PATTERN WITH A LIST OF ALTERNATIVES o P ATTERN CAN USE A NUMBER, STRING WITH LOGICAL OR “|” OR ASTERISK OR A RANGE, e.g., y|Y) or *) or 1) or a) or [A-Z]) or [A-Za-z]) or *[0-9]*) o E ACH ALTERNATIVE ASSOCIATED WITH SPECIFIC ACTION o E XPRESSION CAN BE A VARIABLE ENTERED BY USER o E ACH PATTERN LINE MUST END WITH ;; o E ACH case SEQUENCE MUST END WITH easc S CRIPTING I NTERNALS : C ASE C ONDITIONAL 11/19/2009 rwj
16
BROOKDALE COMMUNITY COLLEGE16 G ENERIC FORMAT case expression in pattern 1 )commands 1 ;; pattern 2 )commands 2 ;; pattern 3 )commands 3 ;;... pattern n )commands n ;; esac S CRIPTING I NTERNALS : C ASE C ONDITIONAL
17
11/19/2009 rwjBROOKDALE COMMUNITY COLLEGE17 E XAMPLE : # Use of a case statement to offer a 5 item menu echo “ Menu\n1. List of files \n2. Processes of user\n3. Today’s date 4. Users of system\n5. Quit to Unix\nEnter your option #: \c” read choice case “$choice” in 1)ls -l;; 2)ps -f;; 3)date;; 4)who ;; 5)exit ;; *)echo “Invalid option” # ;; not needed for last option esac S CRIPTING I NTERNALS : C ASE C ONDITIONAL
18
11/19/2009 rwjBROOKDALE COMMUNITY COLLEGE18 L ETS A SET OF INSTRUCTIONS BE REPEATED WHILE A CONDITION EXISTS odo AND done DELIMIT THE LOOP BODY o S OURCE VALUES FOR list IN for LOOP IS YOUR CHOICE – FILE N AME, VARIABLE S CRIPTING I NTERNALS : F OR /W HILE /U NTIL L OOPS while condition is true do commands done for variable in list do commands done for var in $PATH $HOME
19
11/19/2009 rwjBROOKDALE COMMUNITY COLLEGE19 E XAMPLE : CREATE A BACKUP COPY OF EACH FILE NAMED IN A LIST L IST CAN USE WILD - CARD, E. G., CHAPT 2* S CRIPTING I NTERNALS : F OR /W HILE /U NTIL L OOPS $ for f1 in chapt20 chap21 chap22 ; do > cp $f1 ${f1}.bak > Echo $f1 copied to $f1.bak > done NOTE: W HITE SPACE SEPARATES MEMBERS OF LIST, HOWEVER WHITE SPACES IN QUOTES ARE TREATED AS ONE WORD IN THE LIST, E. G., Q 4 Q 5 Q 6 “ Q 7 87”
20
11/19/2009 rwjBROOKDALE COMMUNITY COLLEGE20 while / do LOOP – T O WAIT A WHILE, AND THEN EXECUTE THE COMMAND AGAIN, OR EXECUTE A COMMAND INDEFINITELY OR USE TO EXECUTE A FINITE NUMBER OF TIMES. E XAMPLE : RUN A COMMAND 5 TIMES D ECREMENT OR INCREMENT THE VALUE OF VARIABLE “ X ” EACH ITERATION OF THE LOOP $ x=5 $ while [ $x –gt 0 ] ; do > ps –e ; sleep 3 > x=`expr $x - 1` > done S CRIPTING I NTERNALS : F OR /W HILE /U NTIL L OOPS
21
11/19/2009 rwjBROOKDALE COMMUNITY COLLEGE21 expr :: 4 BASIC ARITHMETIC OPERATIONS ON NUMBERS A DD, SUBTRACT, MULTIPLY, DIVIDE E SCAPE MULTIPLY SIGN \* $ x=3; y=5 $ expr 3 + 5 # simple sum using numbers $ expr $x - $y # simple difference using variables $ expr $x \* $y # escape the astrisk $ expr $y / $x # decimal truncated $ z=`expr $x \* $y`; echo $z # create new variable A RITHMETIC O PTIONS : C OMPUTATION WITH expr
22
11/19/2009 rwjBROOKDALE COMMUNITY COLLEGE22 expr :: TO VALIDATE LENGTH OF OR EXTRACT STRINGS U SES 2 EXPRESSIONS SEPARATED BY A COLON D ETERMINE LENGTH OF STRING : $ expr “robert_kahn” : ‘.*’ # white space around : A RITHMETIC O PTIONS : C OMPUTATION WITH expr V ALIDATE LENGTH OF STRING : if [ `expr “$name” : ‘.*’` -gt 20 ]; then
23
11/19/2009 rwjBROOKDALE COMMUNITY COLLEGE23 E XECUTES A GROUP OF STATEMENTS ENCLOSED WITHIN { } F UNCTION NAME IDENTIFIED WITH () AFTER THE STRING INDICATING A NULL ARGUMENT LIST functionName() { statements return value # value is a number } S HELL F UNCTIONS
24
11/19/2009 rwjBROOKDALE COMMUNITY COLLEGE24 D EBUGING S HELL S CRIPTS : S HELL F UNCTIONS 2. C OMMAND LINE EXAMPLE : $ ll() { > ls –l $* | more > } 1. C OMMAND LINE EXAMPLE WITH RETURN VALUE SUPPORTING POSITIONAL PARAMETERS : $ anymore() { > echo “$1 ?(y/n) : \c” 1>&2 > read input > case “$input” in > y|Y) echo 1>&2; return 0 ;; > *) return 1 ;; > esac > }
25
11/19/2009 rwjBROOKDALE COMMUNITY COLLEGE25 D EBUGGING S HELL S CRIPTS : DEBUG F UNCTION M OST BASIC WAY IS TO USE COMMAND set set -o verbose set –o xtrace verbose E CHOES EACH COMMAND BEFORE RUNNING THEM TO stderr xtrace E CHOES EACH COMMAND AFTER COMMAND - LINE PROCESSING, AFTER PARAMETER AND COMMAND SUBSTITUTION, AND THE OTHER SUBSEQUENT STEPS. S TARTS EACH LINE IT PRINTS WITH + WHICH IS CUSTOMIZABLE THROUGH THE BUILT - IN SHELL VARIABLE PS4. S O YOU CAN SET PS4 TO "xtrace-> "
26
11/19/2009 rwjBROOKDALE COMMUNITY COLLEGE26 D EBUGGING S HELL S CRIPTS : DEBUG F UNCTION O THER WAYS : –U SE PS4='$0 line $LINENO: ‘ TO DISPLAY THE FILE NAME AND LINE NUMBER –U SE PS4= “xtrace-> ” TO CHANGE THE INDICATOR –I F CODE DEBUGGING CALLS OTHER FUNCTIONS DEFINED ELSEWHERE, USE THE SAME WAY WITH AN OPTION TO THE TYPESET COMMAND. T O TRACE THE NAMED FUNCTION ( fnName ) WHENEVER IT RUNS, E NTER THE COMMAND IN THE SHELL THAT CALLS IT typeset -ft fnName, # f = fn, t = trace
27
11/19/2009 rwjBROOKDALE COMMUNITY COLLEGE27 S HELL P ROGRAM D ESIGN T ECHNIQUES : B ASICS OF S CRIPT W RITING W RITING ANY SCRIPT INVOLVES THESE STEPS : R UN THE UNIX COMMAND INTERACTIVELY AT A SHELL PROMPT. C REATE THE SHELL SCRIPT CONTAINING UNIX COMMAND AND S HELL CONSTRUCTS. M AKE THE SHELL SCRIPT EXECUTABLE. T EST THE SCRIPT. L AUNCH THE SCRIPT. 1.I NTERACTIVELY 2.O NCE, AT A FUTURE DATE AND TIME 3.R EPEATEDLY ON A FIXED SCHEDULE E MPLOY A CONVENTION FOR NAMING & STORING SCRIPTS
28
11/19/2009 rwjBROOKDALE COMMUNITY COLLEGE28 S HELL P ROGRAM D ESIGN T ECHNIQUES : B ASICS OF S CRIPT W RITING S CRIPT W RITING T IPS : S TART SCRIPTS WITH A COMMENT LINE THAT EXPLAINS THE SCRIPT ’ S PURPOSE. U SE UPPERCASE WHEN DEFINING VARIABLES. U SE UNDERSCORES ( _ ) TO SEPARATE WORDS. E XPORT ENVIRONMENT VARIABLES TO PROVIDE ANY SUB - PROCESSES WITH AUTOMATIC ACCESS TO THE VALUES.
29
11/19/2009 rwjBROOKDALE COMMUNITY COLLEGE29 S HELL P ROGRAM D ESIGN T ECHNIQUES : B ASICS OF S CRIPT W RITING S CRIPT W RITING T IPS ( CONT ’ D ): T O USE THE OUTPUT OF A UNIX COMMAND ELSEWHERE IN SCRIPT, TYPE A $, ENCLOSE THE COMMAND WITHIN PARENTHESES (), AND STORE THE OUTPUT IN AN ENVIRONMENT VARIABLE, E. G., VAR1=$(command1|command2) T O USE A VALUE OF AN ENVIRONMENT VARIABLE, PUT A $ IN FRONT OF THE VARIABLE NAME AND TO AVOID AMBIGUITIES, ENCLOSE THE VARIABLE NAME INSIDE CURLY BRACES {} W HEN RUNNING A SCRIPT FROM THE CURRENT DIRECTORY, PRECEDE A SCRIPT NAME WITH DOT - SLASH (./ ) TO INSTRUCT THE SHELL TO LOOK IN THE CURRENT DIRECTORY
30
11/19/2009 rwjBROOKDALE COMMUNITY COLLEGE30 S HELL P ROGRAM D ESIGN T ECHNIQUES : B ASICS OF S CRIPT W RITING S CRIPT W RITING T IPS ( CONT ’ D ): R EDIRECT stderr, EITHER TO THE SAME DESTINATION AS stdout OR TO A UNIQUE FILE R EDIRECT stdout ( > ) TO A FILE, OR APPEND stdout ( >> ) TO A FILE U SE THE FOR - LOOP OR WHILE LOOP OR CASE LOOP TO PROCESS A LIST OF THINGS
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.