Download presentation
Presentation is loading. Please wait.
Published byBrisa Claxton Modified over 9 years ago
1
More Shell Programming Software Tools
2
Slide 2 Keyword Shell Variables l 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
Slide 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
Slide 4 Readonly Shell Variables l $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
Slide 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
Slide 6 Command Line Argument Example l 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
Slide 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
Slide 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
Slide 9 shift Example l 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
Slide 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
Slide 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
Slide 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
Slide 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
Slide 14 $$ l 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
Slide 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 done $ printall Print it1 [y/n]? y Print it2 [y/n]? n
16
Slide 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
Slide 17 for Example 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
Slide 18 for Example 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
Slide 19 for Example $ 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 $
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.