1 / 19

More Shell Programming

Software Tools. More Shell Programming. Keyword Shell Variables. The shell sets keyword shell variables. You can use (and change) them. HOME The path to your home directory PATH Directories where the shell looks for executables USER Your login name

Download Presentation

More 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. Software Tools More Shell Programming

  2. Keyword Shell Variables • The shell sets keyword shell variables. You can use (and change) them. HOME The path to your home directory PATH Directories where the shell looks for executables USER Your login name SHELL The name of the shell you are running PWD The current working directory PRINTER Can be loaded with your default printer

  3. Keyword Example $ cat env1 #!/bin/sh echo "Hi $USER!" echo "Your home is: $HOME" echo "Your path is: $PATH" echo "Your current directory is: $PWD" echo "Your shell is: $SHELL" echo "Your printer is: $PRINTER" $ env1 Hi horner! Your home is: /homes/horner Your path is:/usr/bin:.:.:/homes/horner/Unix/bin:... Your current directory is: /homes/horner/111 Your shell is: /bin/tcsh Your printer is:

  4. Readonly Shell Variables • $0 is the name the user typed to invoke the shell script: $ cat print1 #!/bin/sh echo "This script is called $0" $ print1 This script is called print1 $ ./print1 This script is called ./print1 $ ~/111/print1 This script is called /homes/horner/111/print1

  5. Command Line Arguments • The command line arguments that you call a script with are stored in variables $1, $2, ..., $9. $ cat args1 #!/bin/sh echo "The args are $1 $2 $3 $4 $5 $6 $7 $8 $9" $ args1 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 The args are a1 a2 a3 a4 a5 a6 a7 a8 a9 • With more than 9 arguments, they are still stored, but they have to be moved using the shift command before they can be accessed.

  6. Command Line Argument Example • How to write a command to swap two files? $ cat swap #!/bin/sh mv $1 /tmp/$1 mv $2 $1 mv /tmp/$1 $2 $ cat it1 contents of file1 $ cat it2 contents of file2 $ swap it1 it2 $ cat it1 contents of file2 $ cat it2 contents of file1 $

  7. Command Line Arguments • $* lists all the command line args: $ cat args2 #!/bin/sh echo "The args are $*" $ args2 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 The args are a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 • $# contains the number of args: $ cat args3 #!/bin/sh echo "The number of args is $#" $ args2 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 The number of args is 10

  8. shift • The shift command promotes each command line argument by one (e.g., the value in $2 moves to $1,$3 moves to $2, etc.) $ cat shiftargs #!/bin/sh echo "The args are 0 = $0, 1 = $1, 2 = $2" shift echo "The args are 0 = $0, 1 = $1, 2 = $2" shift echo "The args are 0 = $0, 1 = $1, 2 = $2" shift $ shiftargs arg1 arg2 arg3 The args are 0 = shiftarg, 1 = arg1, 2 = arg2 The args are 0 = shiftarg, 1 = arg2, 2 = arg3 The args are 0 = shiftarg, 1 = arg3, 2 = • The previous $1 becomes inaccessible

  9. shift Example • How to write a general version of the swap command for two or more files? swap f1 f2 f3 ... fn_1 fn f1 <--- f2 f2 <--- f3 f3 <--- f4 ... fn_1 <--- fn fn <--- f1

  10. shift Example $ cat swap1 #!/bin/sh orig1=$1 mv $1 /tmp/$1 while [ $2 ] do mv $2 $1 shift done mv /tmp/$orig1 $1 $ cat it1 it2 it3 contents of file1 contents of file2 contents of file3 $ swap1 it1 it2 it3 $ cat it1 it2 it3 contents of file2 contents of file3 contents of file1

  11. shift Example $ swap1 it1 it2 it3 $ cat it1 it2 it3 contents of file3 contents of file1 contents of file2 $ swap1 it1 it2 it3 $ cat it1 it2 it3 contents of file1 contents of file2 contents of file3 $ swap1 it1 it2 $ cat it1 it2 contents of file2 contents of file1

  12. set • The set command sets the args: $ cat set1 #!/bin/sh set yat yih saam echo "One is $1, two is $2, three is $3" $ set1 One is yat, two is yih, three is saam • The set command is useful for moving the output of command substitution into the args: $ date Thu Sept 22 17:06:27 HKT 2006 $ cat day #!/bin/sh set `date` echo "Today is $3 $2 $6" $ day Today is 22 Sept 2006

  13. $$ • $$ is the process ID (PID) of the current process (the shell script PID, or the shell PID if interactive). $ cat pid #!/bin/sh echo $$ $ pid 1154 $ pid 1156 $ pid 1157 $ echo $$ 892 $ ps PID TTY TIME CMD 892 pts/0 0:01 csh

  14. $$ • It can be used for temporary file names: $ cat swap2 #!/bin/sh file=/tmp/tmp$$ mv $1 $file mv $2 $1 mv $file $2 $ cat it1 it2 contents of file1 contents of file2 $ swap2 it1 it2 $ cat it1 it2 contents of file2 contents of file1 $

  15. for • The for statement executes a loop once for each of a list of possibilities: $ cat printall #!/bin/sh for file in * do if [ -f $file ] then echo "Print $file [y/n]? " read resp if [ $resp = "y" ] then lpr –Pcll2a $file fi fi done $ printall Print it1 [y/n]? y Print it2 [y/n]? n

  16. for • If the “in ___” part is omitted, it defaults to $*: $ cat p #!/bin/sh for file do if [ -f $file ] then lpr –Pcll2a $file fi done $ p it1 it2 it3 $

  17. forExample • This program will do a recursive listing of all directories. The first argument is the directory to start from. An optional second argument controls the number of leading “:” characters. $ cat ldrec #!/bin/sh cd $1 if [ $2 ] then space=$2 else space=0 fi space1=`expr $space + 1`

  18. forExample for f in * do if [ -d $f ] then i=1 while [ $i -le $space ] do echo –n ":" i=`expr $i + 1` done echo $f /homes/horner/111/ldrec $1/$f $space1 fi done • The -n in echo will prevent a newline from printing.

  19. forExample $ ls -F letter1 secret/ secret1/ secret2/ secret3/ secret4/ secretslink@ $ ldrec /homes/horner/111 secret :verysecret ::veryverysecret secret1 /homes/horner/111/ldrec: /homes/horner/111/secret1: permission denied secret2 /homes/horner/111/ldrec: /homes/horner/111/secret2: permission denied secret3 secret4 secretslink :verysecret ::veryverysecret $

More Related