Library functions
• We do not have to run everything as a script• We may have an interesting function we make
available.• There is an analogy with Java • Just like a public library we can borrow from.• Typically store these in a lib/ directory.
~/lib/libFunction.txt
• cat ~lib/libFunction.txt
• scope () #function name• { #function body• echo this is a library function• }
~/lib/libFunctionArg.txt
• myEchoArg ()• {• echo I hope you supplied an argument• echo $1• echo $0 • }
My script calls library functions.
• #! /bin/bash• # this defines the path to the function• . ~/lib/libFunction.txt • . ~/lib/libFunctionArg.txt• scope• myEchoArg thisone• myEchoArg thatone
sh libCalling.sh – the output.
• sh libCalling.sh• this is a library function• I hope you supplied an argument• thisone• libCalling.sh• I hope you supplied an argument• thatone• libCalling.sh
Do Aliases work in a script?
• $ ls• a.txt b.txt c.txt remove.sh
remove.sh~• $ rm a.txt• rm: remove regular empty file `a.txt'? y• $ sh remove.sh• $ ls• remove.sh remove.sh~
Expanding arguments 1
• # run this script with different arguments. • #sh argsExpand.sh a b c d• #sh argsExpand.sh a b 'c d'• #sh argsExpand.sh a b "c d"
mailx
• $ mailx -s hi zlizjw1• Hi John Hope you are doing okay• press ctrl d to end message• Cc: zlizjw1• /usr/sbin/sendmail: Permission denied• $ mailx• No mail for zlizjw1
Mesg 1
• 'y' and 'n' options respectively allow and disallow write access to your terminal.
• the permission other users have to write to your terminal using the talk and write commands
write
• The correct syntax for the write command is:• write user [tty] message• $ write zlizjw1• hi there, fancy a coffee in 10 minutes?• Message from zlizjw1@unnc-
cslinux.nottingham.edu.cn on pts/20 at 16:27 ...• hi there, fancy a coffee in 10 minutes?• EOF
Wait 1
• echo start of first loop > output.txt• for i in 1 2 3 4 5 • do •• echo i = $i >> output.txt• done &
Wait 2
• #$! is the process ID of the last process• echo $!• lastprocessID=$!• #this will wait for that process to end. • wait $lastprocessID
Tee for two?
• echo hi (this goes to screen)• echo hi > file1.txt (this goes to file1.txt )• echo hi | tee file1.txt (sends to screen and
file1.txt)• echo hi | tee file1.txt file2.txt (sends to screen
and file1.txt file2.txt)
Tee –a (append)
• echo hi | tee -a file1.txt• This will append
• Question• How would you stop tee from printing to
screen?
No clobber - append
• set –o noclobber• echo “even more” >| myfile.txt• echo >> myfile.txt• This still works.
Octal dump
• $ echo "a b c d" >| a.txt• $ od a.txt• 0000000 020141 020142 020143 005144• 0000010• Usually very long – so pipe into head• od file.txt| head
Octal dump
• -c will give the characters. • echo "a b c" > file.txt• $ od -c file.txt• 0000000 a b c \n• 0000006
nohup
• If you have a big program you do not want to stop when you log off?
• java bigProgram& • nohup java bigProgram &• (nohup = no hang up – like a telephone)
time
• $ time sleep 5• real 0m5.004s• (real time elapsed)• user 0m0.000s• (time spent processing user’s command)• sys 0m0.002s• (time spent by system, e.g. moving processes)
Check sum
• If you sender and reciever have a file, how can they be sure the file is not corrupted by noise.
• Checksum will generate a number (two), and if the numbers at the same then they can be confident that the message was not corrupted.
Check sum
• []$ echo hi | cksum• 1479881546 3• []$ echo hi | cksum• 1479881546 3• []$ echo Hi | cksum• 3000792507 3
Path check 1
• pathchk -p my12345678901234567890.sh• pathchk: name
`my12345678901234567890.sh' has length 25; exceeds limit of 14
• The –p is for portability.
Path check 2
• $ pathchk a/a.txt• [zlizjw1@unnc-cslinux LAB]$ cat a/a.txt• this• [zlizjw1@unnc-cslinux LAB]$ chmod 000 a• [zlizjw1@unnc-cslinux LAB]$ pathchk a/a.txt• pathchk: directory `a' is not searchable