shell programmingcmpsc 311 - introduction to systems programming page 2 shell programming aka...
TRANSCRIPT
CMPSC 311 - Introduction to Systems Programming Page 1
Institute for Networking and Security ResearchDepartment of Computer Science and EngineeringPennsylvania State University, University Park, PA
Systems and Internet Infrastructure Security
i
i
Shell Programming(Part 1: Syntax and Scripting)
Devin J. Pohly<[email protected]>
Page 2CMPSC 311 - Introduction to Systems Programming
Shell programming
● aka “shell scripting,” “Bash scripting”
● What is it?● Series of commands● Programming with
programs
● What for?● Automating● System administration● Prototyping
Page 3CMPSC 311 - Introduction to Systems Programming
A sample script: shello
● First line: interpreter● The #! is important!
● Comment: # to EOL● Make it executable
● chmod +x shello● Not by file extension● Typical: .sh or none
● Run it● ./shello
#! /bin/bash
# Greetings!echo Shello world
# Use a variableecho Shello "$USER"
# Set a variablegreetz=Shellutationsecho "$greetz world"
Page 4CMPSC 311 - Introduction to Systems Programming
Shell variables
● Setting/unsetting● var=value● No spaces!● unset var
● Using the value● $var
● Untyped by default● Behave like strings● (See declare builtin)
Page 5CMPSC 311 - Introduction to Systems Programming
Special variables
● Getting info● $USER● $HOME
– (aside: ~ is similar)
● $PWD
● Changing behavior● $PATH
– Colon-separated● $PS1
● And more...
Page 6CMPSC 311 - Introduction to Systems Programming
Exercise
● Make a directory ~/bin● Move shello script
there● Prepend the directory
to your $PATH● PATH=~/bin:$PATH
● Change to home dir● Run by typing shello
Page 7CMPSC 311 - Introduction to Systems Programming
Shell initialization
● Set custom variables● ~/.bashrc
● Just a script● Runs at shell startup
● Anything you want
● (Note: set and export LD_LIBRARY_PATH=.)
Page 8CMPSC 311 - Introduction to Systems Programming
Fun with prompts
● Main prompt: $PS1● Special values
● \u: username● \h: hostname● \w: working dir● \e: escape (for colors)● many others
● Can set in .bashrc
Very detailed treatment: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/
Page 9CMPSC 311 - Introduction to Systems Programming
Special characters
● echo Penn State is #1● echo Micro$oft Windows● echo Steins;Gate● What happened?
Page 10CMPSC 311 - Introduction to Systems Programming
Special characters
● echo Penn State is #1● echo Micro$oft Windows● echo Steins;Gate● What happened?● Many special characters
● Whitespace● #$*&^?!~'`"\{}[]<>()|;
● What if we want these characters?
Page 11CMPSC 311 - Introduction to Systems Programming
Quoting
● Removes specialness● Hard quotes: '…'
● Quote everything except closing '
● Soft quotes: "…"● Allow variables (and
some other things)● Good practice: "$var"
● Backslash (escaping)● Quotes next character
Page 12CMPSC 311 - Introduction to Systems Programming
Arguments
● In C: argc and argv[]● Split at whitespace
● How to override this?
● Arguments to a script● ./script foo bar● $# is the same as argc● "$@": all args● "$1" to "$9": individual
● "$_": last arg, prev cmd
Page 13CMPSC 311 - Introduction to Systems Programming
Debug mode
● Shows each command● Variables expanded● Arguments quoted
● Run with bash -x ● Temporary● bash -x shello
Page 14CMPSC 311 - Introduction to Systems Programming
Exercises
● Make a script that:● Prints its first argument
doubled
./script1 foofoofoo
● Prints its first four args in brackets, one per line
./script2 "foo bar" baz[foo bar][baz][][]