advanced unix
play

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


  1. 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

  2. Overview 1 . Making a File Executable 2 . Combining Commands 3 . Redirecting Output 4 . Executing Scripts 5 . Variables 6 . Control Flow continued 2 CIS 218 Advanced UNIX

  3. 7 . Functions 8 . Other Commands 9 . Here Documents 10 . Debugging 11 . More Information 3 CIS 218 Advanced UNIX

  4. 1 . Making a File Executable  $ cat whoson date echo Users currently logged on who  Wrong: $ whoson whoson: Permission denied 4 CIS 218 Advanced UNIX

  5. Right:  $ ls -lg whoson -rw-r--r-- 1 ad pubs 42 Jun 17 10 : 55 whoson $ chmod u+x whoson $ ls -lg whoson -rwxr--r-- 1 ad pubs 42 Jun 17 10 : 55 whoson  $ whoson Tue Nov 7 13 : 21 : 34 ICT 2000 Users currently logged in ad consol Nov 7 08: 26 jenny tty 02 Nov 7 10:04 5 CIS 218 Advanced UNIX

  6. Possible PATH Problem  $ whoson whoson: Command not found  Due to PATH shell variable (see later)  Quick fixes: $ ./whoson or $ sh whoson 6 CIS 218 Advanced UNIX

  7. 2 . Combining Commands  Sequencing: $ a ; b ; c  same as: $ a $ b $ c 7 CIS 218 Advanced UNIX

  8. Process Creation (&)  $ a & b & c 14271 (PID for a) 14272 (PID for b)  $ a & b & c & 14290 14291 14292 $  $ a | b | c & 14302 (PID for piped commands) 8 CIS 218 Advanced UNIX

  9. Processes in Action $ cat a echo - n “aaaaaaaaaaaaaaaaaaaaa” echo - n “aaaaaaaaaaaaaaaaaaaaa” sleep 2 echo - n “aaaaaaaaaaaaaaaaaaaaa” echo - n “aaaaaaaaaaaaaaaaaaaaa” On calvin there  Similarly for b and c isn't much variation unless the machine is  Try the following a few times: loaded. $ a & b & c & 9 CIS 218 Advanced UNIX

  10. 3 . Redirecting Output  1 > redirect standard output (stdout) 2 > redirect standard error (stderr) $ cat a b 1 > out 2 > err Files stdout out cat a b err stderr 10 CIS 218 Advanced UNIX

  11. >&  redirect one stream into another: – 2>&1 redirect stderr into stdout $ cat a b 1 > theLot 2>&1 stdout theLot cat a b stderr 11 CIS 218 Advanced UNIX

  12. 4 . Executing Scripts  Make sure that a script is executed by the Bourne Shell: (no need for chmod ) $ sh whoson  or: $ cat boss #!/bin/sh echo Definitely Bourne Shell Script continued 12 CIS 218 Advanced UNIX

  13.  On Linux machines (e.g. calvin ), the Bourne shell has been replaced by Bash – sh means the Bash shell 13 CIS 218 Advanced UNIX

  14. 5 . Variables 5 . 1 . User-defined Variables 5 . 2 . Environment Variables 5 . 3 . Readonly Shell Variables 14 CIS 218 Advanced UNIX

  15. 5 . 1 . User-defined Variables No spaces  $ person=alex around the = $ echo person person $ echo $ person alex  $var returns the value stored in var – called substitution 15 CIS 218 Advanced UNIX

  16. 5 . 1 . 1 . Switch off Substitution  Swich off substitution with ' var ' or \var  $ echo '$person' $person $ echo \$person $person 16 CIS 218 Advanced UNIX

  17. 5 . 1 . 2 . Switch off Special Chars (")  "" switches off the special meaning of characters used in filename generation (e.g. *, ?)  $ ls // directory contents ad.report ad.summary  $ memo=ad* * means only * $ echo "$memo" ad* $ echo $memo * means any number ad.report ad.summary of characters 17 CIS 218 Advanced UNIX

  18. 5 . 1 . 3 . Exporting Variables  Normally a variable is local to the running script (the process).  It is sometimes useful if running scripts (processes) can access another script’s variables. we want to calls use cheese  e.g. extest subtest in subtest cheese=english 18 CIS 218 Advanced UNIX

  19. No Exporting: extest 1 & subtest Using " is  $ cat extest 1 a good habit, cheese=english see later echo "extest 1 1 : $cheese" subtest echo "extest 1 2 : $cheese" $cat subtest echo "subtest 1 : $cheese" cheese=swiss echo "subtest 2 : $cheese" continued 19 CIS 218 Advanced UNIX

  20. subtest does not  $ extest 1 see extest 1 's extest 1 1 : english cheese value subtest 1 : subtest 2 : swiss extest 1 2 : english extest 1 is not affected by subtest 's setting of cheese 20 CIS 218 Advanced UNIX

  21. Exporting: extest 2 & subtest  $ cat extest 2 export cheese cheese=english echo “extest 2 1 : $cheese” subtest echo “extest 2 2 : $cheese”  $ extest 2 extest 2 1 : english cheese value passed in subtest 1 : english subtest 2 : swiss change not exported extest 2 2 : english from subtest 21 CIS 218 Advanced UNIX

  22. 5 . 1 . 4 . Reading read inputs everything up to the newline  $ cat readln echo - n “Type: ” read ln echo “You entered: $ln”  $ readln Type: The Wizard of Oz You entered: The Wizard of Oz 22 CIS 218 Advanced UNIX

  23. No Quotes  $ cat readlnnq echo - n “Type: ” read ln echo You entered: $ln directory  $ ls ad.report summary 1 contents $ readlnnq Type: * You entered: ad.report summary 1 23 CIS 218 Advanced UNIX

  24. 5 . 1 . 5 . Executing Commands A very simple shell  $ cat proc_cmd echo - n “Enter a command: ” read command $command echo Thanks  $ proc_cmd Enter a command: echo Display this Display this Thanks 24 CIS 218 Advanced UNIX

  25. 5 . 1 . 6 . Splitting Input Text is split based on white  $ cat split 3 space. echo - n “Enter something: ” read word 1 word 2 word 3 echo “Word 1 is: $word 1 ” echo “Word 2 is: $word 2 ” echo “Word 3 is: $word 3”  $ split 3 Enter something: this is something Word 1 is: this Word 2 is: is Word 3 is: something 25 CIS 218 Advanced UNIX

  26.  $ split 3 Enter something: this is something else, x Word 1 is: this Word 2 is: is Word 3 is: something else, x The last variable gets everything that is left in the input. 26 CIS 218 Advanced UNIX

  27. 5 . 1 . 7 . Command Subsitution Must use ‘  $ cat mydir this_dir=‘pwd‘ echo “Using the $this_dir directory.” this_date=$(date) A Bash echo "Today's date: $this_date" addition  $ mydir Using /home/ad/teach/adv-unix/bourne directory Today's date: Tue Nov 7 13 : 52 : 46 ICT 2000 $ 27 CIS 218 Advanced UNIX

  28. 5 . 2 . Environment Variables  Most environment variables get their values from the shell at login.  The values of some of the variables can be set by editing the .profile file in your home directory – Bash uses .bash_profile and .bashrc 28 CIS 218 Advanced UNIX

  29. 5 . 2 . 1 . Examples  HOME pathname of your home directory  $ pwd /home/ad/planning $ echo $HOME /home/ad cd uses HOME $ cd to return to your $ pwd home directory /home/ad continued 29 CIS 218 Advanced UNIX

  30.  PATH – directories where executable can be found – represented as a string of pathnames separated by ‘:’ s  $ echo $PATH Extend the /usr/local/bin:/usr/bin:/bin: default PATH $ PATH=SPATH":/home/ad/bin:." $ echo $PATH /usr/local/bin:/usr/bin:/bin:/home/ad/bin:. 30 CIS 218 Advanced UNIX

  31. Note for SysAdmins  If you are the system administrator (superuser, root) for your machine, do not extend your path with "." – it opens you to potential attack by hackers – e.g. 'fake' UNIX utilities placed in the current directory 31 CIS 218 Advanced UNIX

  32. 5 . 2 . 2 . Typical .profile  $ cat .profile TERM=vt 100 PATH=$PATH":/home/ad/bin:." PS 1 =“ad: “ CDPATH=:$HOME export TERM PATH PS 1 CDPATH stty kill ^u export needed  $ . .profile in the Bourne shell 32 CIS 218 Advanced UNIX

  33. 5 . 2 . 3 . Typical .bash_profile  On calvin , .bash_profile simply invokes your .bashrc (if it exists): umask 002 if [ -f ~/.bashrc -a PS 1 ="\$ " ]; then . ~/.bashrc fi These shell commands will be explained later continued 33 CIS 218 Advanced UNIX

  34. Typical .bashrc  PS 1 ="\u@\h$ " # PS 1 ="\w[\#]$ " No export needed PATH=$PATH":." alias ls='/bin/ls -F' alias dir='ls -ba' alias cls="clear" These features : will be explained : later. psgrep() { ps aux | grep $1 | grep -v grep } 34 CIS 218 Advanced UNIX

  35. 5 . 2 . 4 . set  The current settings for the environment variables can be listed with set : $ set | more BASH=/bin/bash : PATH=/usr/local/bin:/usr/bin:/bin:. : PS 1 ='\u@\h$ ' : 35 CIS 218 Advanced UNIX

  36. 5 . 3 . Readonly Shell Variables  These are environment variables that cannot have their values changed.  Most of them relate to the arguments supplied to a script when it is called. 36 CIS 218 Advanced UNIX

  37. 5 . 3 . 1 . Script Name ( $0 )  $ cat abc echo The name of this script is $0  $ abc The name of this script is abc 37 CIS 218 Advanced UNIX

  38. 5 . 3 . 2 . Script Arguments ( $1, $2,..., $9 )  $ cat display_ 5 args echo The first five command line echo arguments are $1 $2 $3 $4 $5  $ display_ 5 args jenny alex helen The first five command line arguments are jenny alex helen If the variable has no value, then nothing is printed. 38 CIS 218 Advanced UNIX

  39. 5 . 3 . 3 . All Arguments ( $* )  $ cat display_all echo $*  $ display_all a b c de fg hi jk mno pqr stu w x y z a b c de fg hi jk mno pqr stu w x y z  $@ is like $* but puts “...” around each printed argument 39 CIS 218 Advanced UNIX

  40. 5 . 3 . 4 . Number of Arguments ( $# )  $ cat num_args echo “This script has $# arguments.”  num_args helen alex jenny This script has 3 arguments 40 CIS 218 Advanced UNIX

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend