CIS 218 Advanced UNIX 1
Advanced UNIX
Objectives
– explain how to write Bourne and Bash Shell scripts
CIS 218 – Advanced UNIX
- 6. The Bourne and
Advanced UNIX CIS 218 Advanced UNIX 6 . The Bourne and Bash Shells - - PowerPoint PPT Presentation
Advanced UNIX CIS 218 Advanced UNIX 6 . The Bourne and Bash Shells Objectives explain how to write Bourne and Bash Shell scripts 1 CIS 218 Advanced UNIX Overview 1 . Making a File Executable 2 . Combining Commands 3 . Redirecting Output
CIS 218 Advanced UNIX 1
CIS 218 Advanced UNIX 2
CIS 218 Advanced UNIX 3
CIS 218 Advanced UNIX 4
$ cat whoson
CIS 218 Advanced UNIX 5
$ ls -lg whoson
$ whoson
CIS 218 Advanced UNIX 6
$ whoson
CIS 218 Advanced UNIX 7
CIS 218 Advanced UNIX 8
$ a & b & c
$ a & b & c &
$ a | b | c &
CIS 218 Advanced UNIX 9
CIS 218 Advanced UNIX 10
CIS 218 Advanced UNIX 11
CIS 218 Advanced UNIX 12
CIS 218 Advanced UNIX 13
CIS 218 Advanced UNIX 14
CIS 218 Advanced UNIX 15
$ person=alex
$var returns the value stored in var
CIS 218 Advanced UNIX 16
$ echo '$person'
CIS 218 Advanced UNIX 17
$ ls
$ memo=ad*
CIS 218 Advanced UNIX 18
CIS 218 Advanced UNIX 19
$ cat extest1
CIS 218 Advanced UNIX 20
$ extest1
CIS 218 Advanced UNIX 21
$ cat extest2
$ extest2
CIS 218 Advanced UNIX 22
$ cat readln
$ readln
CIS 218 Advanced UNIX 23
$ cat readlnnq
$ ls
CIS 218 Advanced UNIX 24
$ cat proc_cmd
$ proc_cmd
CIS 218 Advanced UNIX 25
$ cat split3
$ split3
CIS 218 Advanced UNIX 26
$ split3
CIS 218 Advanced UNIX 27
$ cat mydir
$ mydir
CIS 218 Advanced UNIX 28
CIS 218 Advanced UNIX 29
HOME
$ pwd
CIS 218 Advanced UNIX 30
PATH
$ echo $PATH
CIS 218 Advanced UNIX 31
CIS 218 Advanced UNIX 32
$ cat .profile
$ . .profile
CIS 218 Advanced UNIX 33
CIS 218 Advanced UNIX 34
PS1="\u@\h$ "
# PS1="\w[\#]$ " PATH=$PATH":." alias ls='/bin/ls -F' alias dir='ls -ba' alias cls="clear" : : psgrep() { ps aux | grep $1 | grep -v grep }
CIS 218 Advanced UNIX 35
$ set | more BASH=/bin/bash : PATH=/usr/local/bin:/usr/bin:/bin:. : PS1='\u@\h$ ' :
CIS 218 Advanced UNIX 36
CIS 218 Advanced UNIX 37
$ cat abc
$ abc
CIS 218 Advanced UNIX 38
$ cat display_5args
$ display_5args jenny alex helen
CIS 218 Advanced UNIX 39
$ cat display_all
$ display_all a b c de fg hi jk mno pqr
$@ is like $* but puts “...” around each
CIS 218 Advanced UNIX 40
$ cat num_args
num_args helen alex jenny
CIS 218 Advanced UNIX 41
shift moves argument values on the
CIS 218 Advanced UNIX 42
$ cat demo_shift
$ demo_shift alice helen jenny june
CIS 218 Advanced UNIX 43
set ‘cmd‘
CIS 218 Advanced UNIX 44
$ date
CIS 218 Advanced UNIX 45
$ dataset
CIS 218 Advanced UNIX 46
CIS 218 Advanced UNIX 47
$ cat same_word
CIS 218 Advanced UNIX 48
$ same_word
CIS 218 Advanced UNIX 49
$ cat chkargs
$ chkargs
CIS 218 Advanced UNIX 50
$ cat show
CIS 218 Advanced UNIX 51
$ cat same3
CIS 218 Advanced UNIX 52
CIS 218 Advanced UNIX 53
$cat command_menu
CIS 218 Advanced UNIX 54
CIS 218 Advanced UNIX 55
$ command_menu
CIS 218 Advanced UNIX 56
CIS 218 Advanced UNIX 57
$cat timeDay
CIS 218 Advanced UNIX 58
CIS 218 Advanced UNIX 59
string1 = string2 string1 != string2 -n string
-z string
CIS 218 Advanced UNIX 60
number1 -eq number2
number1 -ne number2
number1 -lt number2
number1 -le number2
number1 -gt number2
number1 -ge number2
CIS 218 Advanced UNIX 61
-f file
-d file
-r file
-w file
-x file
CIS 218 Advanced UNIX 62
! expr
expr1 -a expr2
expr1 -o expr2
( expr )
CIS 218 Advanced UNIX 63
CIS 218 Advanced UNIX 64
$ cat fruit
$ fruit
CIS 218 Advanced UNIX 65
CIS 218 Advanced UNIX 66
$ cat file-fors2
CIS 218 Advanced UNIX 67
$ cat whos
CIS 218 Advanced UNIX 68
$ cat count
$ count
CIS 218 Advanced UNIX 69
while sleep 60
CIS 218 Advanced UNIX 70
until command
CIS 218 Advanced UNIX 71
CIS 218 Advanced UNIX 72
CIS 218 Advanced UNIX 73
CIS 218 Advanced UNIX 74
#!/bin/sh # watchwho: watch who logs in and out new=/tmp/wwho1.$$
> $old # create an empty file while true do who > $new diff $old $new mv $new $old sleep 60 done | awk ’/>/ {$1 = “in: “; print} /</ {$1 = “out: “; print}’
CIS 218 Advanced UNIX 75
$ watchwho
in: root tty1 Nov 6 09:32 in: ad pts/3 Nov 8 08:49 (myrrh.coe.psu.ac.th) in: s4010441 pts/5 Nov 8 10:11 (192.168.0.134) in: ad pts/4 Nov 8 10:12 (myrrh.coe.psu.ac.th) in: s4010143 pts/17 Nov 7 23:57 (192.168.0.204)
in: ad pts/4 Nov 8 10:16 (myrrh.coe.psu.ac.th)
:
CIS 218 Advanced UNIX 76
diff uses ‘<‘ and ‘>‘ to distinguish data
$ diff old new
CIS 218 Advanced UNIX 77
CIS 218 Advanced UNIX 78
CIS 218 Advanced UNIX 79
#!/bin/sh # checkmail: watch mailbox for growth time=${1-60}
while true do newls="‘ls -l $MAIL‘" echo $oldls $newls
sleep $time done | awk ’$5 < $14 {print “You have mail”}’
CIS 218 Advanced UNIX 80
$MAIL is a builtin shell variable, with the
t=${1-60} sets t to $1 or, if no argument is
CIS 218 Advanced UNIX 81
CIS 218 Advanced UNIX 82
break and continue are used as in C:
for file in fred* do if [ -d "$file" ]; then # deleted? break # finish loop fi # do something # done
CIS 218 Advanced UNIX 83
continue goes to the top of a loop:
for file in fred* do if [ -d "$file" ]; then # deleted? continue # go back to loop top fi # do something # done
CIS 218 Advanced UNIX 84
if [ -f fred ]; then # is fred a file? : # do nothing else # do something # fi
CIS 218 Advanced UNIX 85
CIS 218 Advanced UNIX 86
CIS 218 Advanced UNIX 87
$ cat inter
trap ’echo PROGRAM INTERRUPTED; exit 1’ INT while true do echo Program running. sleep 2 done
CIS 218 Advanced UNIX 88
CIS 218 Advanced UNIX 89
CIS 218 Advanced UNIX 90
#!/bin/sh
yes_or_no() { # a function echo "Is your name $* ?" while true do echo -n "Enter yes or no: " read x case "$x" in y | yes ) return 0;; n | no ) return 1;; * ) echo "Answer yes or no" esac done } # end of yes_or_no()
CIS 218 Advanced UNIX 91
# the main part of the script echo "Original parameters are $*" if yes_or_no "$1" then echo "Hi $1, nice name" else echo "Never mind" fi exit 0
CIS 218 Advanced UNIX 92
$ my_name andrew davison
Original parameters are andrew davison Is your name andrew ? Enter yes or no: y Hi andrew, nice name $
CIS 218 Advanced UNIX 93
expr evaluates its argument as an
CIS 218 Advanced UNIX 94
$ printf "%s %d\t%s\n" "hi there" 15 students
hi there 15 students $
CIS 218 Advanced UNIX 95
CIS 218 Advanced UNIX 96
$ cat here1
#!/bin/sh cat <<!FUNKY! hello this is a here document !FUNKY!
$ here1
hello this is a here document $
CIS 218 Advanced UNIX 97
CIS 218 Advanced UNIX 98
sh -n script
sh -v script
sh -x script
CIS 218 Advanced UNIX 99