1 / 62

Shell Programming

Shell Programming. University of Maryland Eastern Shore Dept. of Computer Science Jianhua Yang. Outline. Unix Shell programming: Shell scripts. Definition. Uses of shell scripts. Writing shell scripts. Shell scripts. A shell script is a text file with Unix commands in it.

caron
Download Presentation

Shell Programming

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. Shell Programming University of Maryland Eastern Shore Dept. of Computer Science Jianhua Yang CSDP399 Introduction to Unix and Programming

  2. Outline • Unix Shell programming: • Shell scripts. • Definition. • Uses of shell scripts. • Writing shell scripts. CSDP399 Introduction to Unix and Programming

  3. Shell scripts • A shell script is a text file with Unix commands in it. • Shell scripts usually begin with a #! and a shell name (complete pathname of shell). • Pathname of shell be found using the which command. • The shell name is the shell that will execute this script. • E.g: #!/bin/bash CSDP399 Introduction to Unix and Programming

  4. Shell scripts (contd.) • If no shell is specified in the script file, the default is chosen to be the currently executing shell. CSDP399 Introduction to Unix and Programming

  5. Shell scripts (contd.) • Any Unix command can go in a shell script • Commands are executed in order or in the flow determined by control statements. • Different shells have different control structures • The #! line is very important. • We will write shell scripts with the Bourne shell (bash). CSDP399 Introduction to Unix and Programming

  6. Shell scripts (contd.) • A shell script as a standalone is an executable program: • Must use chmod to change the permissions of the script to be executable also. • Can run script explicitly also, by specifying the shell name. • E.g: $ bash myscript • E.g: $ csh myscript CSDP399 Introduction to Unix and Programming

  7. Shell scripts (contd.) • Consider the example • $ bash myscript • Invokes the bash shell and then runs the script using it. • Its almost as if we had the line #! /bin/bash in the file myscript. • Similarly with the second example using csh. • myscript need not be an executable as bash is running the script on its behalf. CSDP399 Introduction to Unix and Programming

  8. Shell scripts (contd.) • Why write shell scripts ? • To avoid repetition: • If you do a sequence of steps with standard Unix commands over and over, why not do it all with just one command? • Or in other words, store all these commands in a file and execute them one by one. • To automate difficult tasks: • Many commands have subtle and difficult options that you don’t want to figure out or remember every time . CSDP399 Introduction to Unix and Programming

  9. Simple Example • Assume that I need to execute the following commands once in a while when I run out of disk space: rm -rf $HOME/.netscape/cache rm -f $HOME/.netscape/his* rm -f $HOME/.netscape/cookies rm -f $HOME/.netscape/lock rm -f $HOME/.netscape/.nfs* rm -f $HOME/.pine-debug* rm -fr $HOME/nsmail CSDP399 Introduction to Unix and Programming

  10. Simple Example (contd.) • We can put all those commands into a shell script, called myscript. [axgopala@nitrogen axgopala]$ cat myscript #! /bin/bash rm -rf $HOME/.netscape/cache rm -f $HOME/.netscape/his* rm -f $HOME/.netscape/cookies rm -f $HOME/.netscape/lock rm -f $HOME/.netscape/.nfs* rm -f $HOME/.pine-debug* rm -fr $HOME/nsmail CSDP399 Introduction to Unix and Programming

  11. Sample Example (contd.) • To run the script: • Step 1: • $ chmod u+x myscript • Step 2: • Run the script: • $ ./myscript • Each line of the script is processed in order. CSDP399 Introduction to Unix and Programming

  12. Shell scripts (contd.) • Shell variables: • Declared by: • varname=varvalue • To make them an environment variable, we export it. • export varname=varvalue CSDP399 Introduction to Unix and Programming

  13. Shell scripts (contd.) • Assigning the output of a command to a variable: • Using backquotes, we can assign the output of a command to a variable: #! /bin/bash filelist=`ls` echo $filelist CSDP399 Introduction to Unix and Programming

  14. Shell scripts (contd.) • Example: [axgopala@nitrogen public]$ ls a b c html/ [axgopala@nitrogen public]$ filelist=`ls` [axgopala@nitrogen public]$ echo $filelist a b c html/ [axgopala@nitrogen public]$ CSDP399 Introduction to Unix and Programming

  15. Shell scripts (contd.) • The expr command: • Calculates the value of an expression. • E.g: [axgopala@nitrogen axgopala]$ value=`expr 1 + 2` [axgopala@nitrogen axgopala]$ echo $value 3 [axgopala@nitrogen axgopala]$ CSDP399 Introduction to Unix and Programming

  16. Notes on expr • Why do we need the expr command ??? • E.g: [axgopala@nitrogen public]$ file=1+2 [axgopala@nitrogen public]$ echo $file 1+2 [axgopala@nitrogen public]$ NOTE: 1+2 is copied as it is into val and not the result of the expression, to get the result, we need expr. CSDP399 Introduction to Unix and Programming

  17. Notes on expr • Variables as arguments: [axgopala@nitrogen axgopala]$ count=5 [axgopala@nitrogen axgopala]$ count=`expr $count + 1` [axgopala@nitrogen axgopala]$ echo $count 6 [axgopala@nitrogen axgopala]$ • NOTE: count is replaced with its value by • the shell! CSDP399 Introduction to Unix and Programming

  18. Notes on expr • expr supports the following operators: • arithmetic operators: +,-,*,/,% • comparison operators: <, <=, ==, !=, >=, > • boolean/logical operators: &, | • parentheses: (, ) • precedence is the same as C, Java CSDP399 Introduction to Unix and Programming

  19. Control statements • Without control statements, execution within a shell scripts flows from one statement to the next in succession. • Control statements control the flow of execution in a programming language. CSDP399 Introduction to Unix and Programming

  20. Control statements • The three most common types of control statements: • conditionals: if/then/else, case, ... • loop statements: while, for, until, do, ... • branch statements: subroutine calls (good programming practice), goto (usage not recommended). CSDP399 Introduction to Unix and Programming

  21. for loops • for loops allow the repetition of a command for a specific set of values. • Syntax: for var in value1 value2 ... do command_set done • command_set is executed with each value of var (value1, value2, ...) in sequence CSDP399 Introduction to Unix and Programming

  22. Notes on for • Example: Listing all files in a directory. #! /bin/bash for i in * do echo $i done NOTE: * is a wild card that stands for all files in the current directory, and for will go through each value in *, which is all the files and $i has the filename. CSDP399 Introduction to Unix and Programming

  23. Notes on for • Example output: [axgopala@nitrogen public]$ chmod u+x listfiles [axgopala@nitrogen public]$ ./listfiles a b c html listfiles [axgopala@nitrogen public]$ CSDP399 Introduction to Unix and Programming

  24. Conditionals • Conditionals are used to “test” something. • In Java or C, they test whether a Boolean variable is true or false. • In a Bourne shell script, the only thing you can test is whether or not a command is “successful”. CSDP399 Introduction to Unix and Programming

  25. Conditionals • Every well behaved command returns back a return code. • 0 if it was successful • Non-zero if it was unsuccessful (actually 1..255) • This is different from C. CSDP399 Introduction to Unix and Programming

  26. The if command • Simple form: if decision_command_1 then command_set_1 fi CSDP399 Introduction to Unix and Programming

  27. The if command • Importance of having then on the next line: • Each line of a shell script is treated as one command. • then is a command in itself • Even though it is part of the if structure, it is treated separately. CSDP399 Introduction to Unix and Programming

  28. grep returns 0 if it finds something returns non-zero otherwise redirect to /dev/null so that "intermediate" results do not get printed Example if grep unix myfile >/dev/null then echo "It's there" fi CSDP399 Introduction to Unix and Programming

  29. Using else with if • Example: #! /bin/bash if grep "UNIX" myfile >/dev/null then echo UNIX occurs in myfile else echo No! echo UNIX does not occur in myfile fi CSDP399 Introduction to Unix and Programming

  30. Using elif with if #! /bin/bash if grep "UNIX" myfile >/dev/null then echo UNIX occurs in myfile elif grep “DOS” myfile > /dev/null then echo DOS appears in myfile not UNIX else echo nobody is here in myfile fi CSDP399 Introduction to Unix and Programming

  31. Using colon in shell scripts • Sometimes, we do not want a statement to do anything. • In that case, use a colon ‘:’ • if grep UNIX myfile > /dev/null • then • : • fi • Does not do anything when UNIX is found in myfile . CSDP399 Introduction to Unix and Programming

  32. The test command • Use for checking validity. • Three kinds: • Check on files. • Check on strings. • Check on integers CSDP399 Introduction to Unix and Programming

  33. File attributes Tests CSDP399 Introduction to Unix and Programming

  34. Example #!/bin/bash count=0 for i in *; do if test –x $i then count=`expr $count + 1` fi done echo Total of $count files executable NOTE: expr $count + 1 serves the purpose of count++ CSDP399 Introduction to Unix and Programming

  35. More about Using test and [] to evaluate expressions • Number comparison CSDP399 Introduction to Unix and Programming

  36. Using Test • test $x –gt $y compare two numbers • test $x -eq $y • test $x –ls $y CSDP399 Introduction to Unix and Programming

  37. examples • x=5; y=7; z=7.2 • test $x –eq $y; echo $? • test $x –lt $y; echo $? • test $z –gt $y; echo $? CSDP399 Introduction to Unix and Programming

  38. []: Shorthand for test • test $x –eq $y  [ $x –eq $y ] CSDP399 Introduction to Unix and Programming

  39. String comparison • s1=s2 equal? • s1!=s2 not equal? • -n stg stg is not a null string • -z stg stg is a null string • stg stg is assigned and not null • s1==s2 (Korn and Bash shell only) CSDP399 Introduction to Unix and Programming

  40. Examples • If [“$option” = “y”] • If [“$option”!=“y”] CSDP399 Introduction to Unix and Programming

  41. Notes on test • Testing on strings. • test –z string: is string of length 0? • test string1 = string2: does string1 equal string2? • test string1 != string2: not equal? CSDP399 Introduction to Unix and Programming

  42. Example #! /bin/bash if test -z $REMOTEHOST then : else DISPLAY="$REMOTEHOST:0“ export DISPLAY fi NOTE: This example tests to see if the value of REMOTEHOST is a string of length > 0 or not, and then sets the DISPLAY to the appropriate value. CSDP399 Introduction to Unix and Programming

  43. Example #!/bin/bash smallest=10000 for i in 5 8 19 8 7 3 do if test $i -lt $smallest then smallest=$i fi done echo $smallest NOTE: This program calculates the smallest among the numbers 5, 8, 19, 8, 3. CSDP399 Introduction to Unix and Programming

  44. Notes on test • The test command has an alias ‘[]’. • Each bracket must be surrounded by spaces #!/bin/bash smallest=10000 for i in 5 8 19 8 7 3 do if [ $i -lt $smallest ] then smallest=$i fi done echo $smallest CSDP399 Introduction to Unix and Programming

  45. The while loop • While loops repeat statements as long as the next Unix command is successful. • Works similar to the while loop in C. CSDP399 Introduction to Unix and Programming

  46. Example #! /bin/bash i=1 sum=0 while [ $i -le 100 ] do sum=`expr $sum + $i` i=`expr $i + 1` done echo The sum is $sum. NOTE: The value of i is tested in the while to see if it is less than or equal to 100. CSDP399 Introduction to Unix and Programming

  47. The untilloop • Until loops repeat statements until the next Unix command is successful. • Works similar to the do-while loop in C. CSDP399 Introduction to Unix and Programming

  48. Example #! /bin/bash x=1 until [ $x -gt 3 ] do echo x = $x x=`expr $x + 1` done NOTE: The value of x is tested in the until to see if it is greater than 3. CSDP399 Introduction to Unix and Programming

  49. Read • Making scripts interactive • Example 13.2 #! /bin/bash echo “Enter the pattern to be searched” read pname echo “Enter the file to be used” read fname echo “Searching for $pname from file $fname” grep “$pname” $fname echo “Selected lines shown above” CSDP399 Introduction to Unix and Programming

  50. Using Command Line Arguments • Like c program to read positional parameters • $0, $1, $2,… • Special parameters • $* - stores the complete set of positional parameters as single string • $# - the number of arguments specified • $? – exit status of last command CSDP399 Introduction to Unix and Programming

More Related