+ All Categories
Home > Documents > Shell Programming (Part 1)Shell initialization •Set custom variables •At startup, bash runs...

Shell Programming (Part 1)Shell initialization •Set custom variables •At startup, bash runs...

Date post: 09-Aug-2020
Category:
Upload: others
View: 10 times
Download: 0 times
Share this document with a friend
18
CMPSC 311: Introduction to Systems Programming Page 1 Institute for Networking and Security Research Department of Computer Science and Engineering Pennsylvania State University, University Park, PA Systems and Internet Infrastructure Security i i Shell Programming (Part 1) Devin J. Pohly <[email protected]>
Transcript
Page 1: Shell Programming (Part 1)Shell initialization •Set custom variables •At startup, bash runs shell commands from ~/.bashrc ‣ Just a shell script •Can do anything you want •Note:

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)

Devin J. Pohly <[email protected]>

Page 2: Shell Programming (Part 1)Shell initialization •Set custom variables •At startup, bash runs shell commands from ~/.bashrc ‣ Just a shell script •Can do anything you want •Note:

Page 2CMPSC 311: Introduction to Systems Programming

Aside: Vim + Make

• Vim integrates with make‣ Write file with :w‣ Type :make target (or

just :make) to build

‣ Vim will read the output and jump you to errors

• Next error: :cnext

• Previous error: :cprev

Page 3: Shell Programming (Part 1)Shell initialization •Set custom variables •At startup, bash runs shell commands from ~/.bashrc ‣ Just a shell script •Can do anything you want •Note:

Page 3CMPSC 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 4: Shell Programming (Part 1)Shell initialization •Set custom variables •At startup, bash runs shell commands from ~/.bashrc ‣ Just a shell script •Can do anything you want •Note:

Page 4CMPSC 311: Introduction to Systems Programming

A sample script: shello• First line: interpreter

‣ The #! is important!

• Comment: # to end-of-line

• Give the file execute permission‣ chmod +x shello‣ Not determined 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 5: Shell Programming (Part 1)Shell initialization •Set custom variables •At startup, bash runs shell commands from ~/.bashrc ‣ Just a shell script •Can do anything you want •Note:

Page 5CMPSC 311: Introduction to Systems Programming

Shell variables

• Setting/unsetting‣ export var=value

‣ No spaces!‣ unset var

• Using the value‣ $var

• Untyped by default‣ Behave like strings‣ (See help declare for

more)

Page 6: Shell Programming (Part 1)Shell initialization •Set custom variables •At startup, bash runs shell commands from ~/.bashrc ‣ Just a shell script •Can do anything you want •Note:

Page 6CMPSC 311: Introduction to Systems Programming

Special variables• Change shell behavior or

give you information‣ $PWD: current directory

‣ $USER: name of the current user

‣ $HOME: the current user’s home directory◾ Can often be abbreviated as a

tilde (~)

‣ $PATH: where to search for executables

‣ $PS1: Bash prompt (will see later)

Page 7: Shell Programming (Part 1)Shell initialization •Set custom variables •At startup, bash runs shell commands from ~/.bashrc ‣ Just a shell script •Can do anything you want •Note:

Page 7CMPSC 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 8: Shell Programming (Part 1)Shell initialization •Set custom variables •At startup, bash runs shell commands from ~/.bashrc ‣ Just a shell script •Can do anything you want •Note:

Page 8CMPSC 311: Introduction to Systems Programming

Shell initialization

• Set custom variables

• At startup, bash runs shell commands from ~/.bashrc‣ Just a shell script

• Can do anything you want

• Note: edit this and add:export LD_LIBRARY_PATH=.

Page 9: Shell Programming (Part 1)Shell initialization •Set custom variables •At startup, bash runs shell commands from ~/.bashrc ‣ Just a shell script •Can do anything you want •Note:

Page 9CMPSC 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

• This is something you can set in your .bashrc

Very detailed treatment: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/

Page 10: Shell Programming (Part 1)Shell initialization •Set custom variables •At startup, bash runs shell commands from ~/.bashrc ‣ Just a shell script •Can do anything you want •Note:

Page 10CMPSC 311: Introduction to Systems Programming

Aside: Vim initialization

• At startup, Vim reads ‘:’ commands from ~/.vimrc‣ Color scheme‣ Indenting preferences‣ Remapping keys‣ Appearance preferences

◾ Line numbers◾ Highlighting matched

parentheses, braces, etc.◾ Titlebar in terminal

colorscheme koehlerset titleset autoindentset showmatchset autowritefiletype plugin indent onsyntax on

Page 11: Shell Programming (Part 1)Shell initialization •Set custom variables •At startup, bash runs shell commands from ~/.bashrc ‣ Just a shell script •Can do anything you want •Note:

Page 11CMPSC 311: Introduction to Systems Programming

Special characters

• echo Penn State is #1

• echo Micro$oft Windows

• echo Steins;Gate

• What happened?

Page 12: Shell Programming (Part 1)Shell initialization •Set custom variables •At startup, bash runs shell commands from ~/.bashrc ‣ Just a shell script •Can do anything you want •Note:

Page 12CMPSC 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 13: Shell Programming (Part 1)Shell initialization •Set custom variables •At startup, bash runs shell commands from ~/.bashrc ‣ Just a shell script •Can do anything you want •Note:

Page 13CMPSC 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 14: Shell Programming (Part 1)Shell initialization •Set custom variables •At startup, bash runs shell commands from ~/.bashrc ‣ Just a shell script •Can do anything you want •Note:

Page 14CMPSC 311: Introduction to Systems Programming

Arguments

• In C: argc and argv[]

• Split at whitespace‣ How can we override

this?

• Arguments to a script‣ ./script foo bar‣ $# is the same as argc‣ "$@": all args‣ "$1" to "$9": individual

Page 15: Shell Programming (Part 1)Shell initialization •Set custom variables •At startup, bash runs shell commands from ~/.bashrc ‣ Just a shell script •Can do anything you want •Note:

Page 15CMPSC 311: Introduction to Systems Programming

Debug mode

• Shows each command‣ Variables expanded‣ Arguments quoted

• Run with bash -x‣ Temporary – just for that

run‣ bash -x shello‣ Use -xv for even more

info

Page 16: Shell Programming (Part 1)Shell initialization •Set custom variables •At startup, bash runs shell commands from ~/.bashrc ‣ Just a shell script •Can do anything you want •Note:

Page 16CMPSC 311: Introduction to Systems Programming

Exercises

• Write a shell 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][][]

Page 17: Shell Programming (Part 1)Shell initialization •Set custom variables •At startup, bash runs shell commands from ~/.bashrc ‣ Just a shell script •Can do anything you want •Note:

Page 17CMPSC 311: Introduction to Systems Programming

Redirecting input/output

• Assigns stdin and/or stdout to a file

• echo hello > world

• echo hello >> world

• tr h j < world

Page 18: Shell Programming (Part 1)Shell initialization •Set custom variables •At startup, bash runs shell commands from ~/.bashrc ‣ Just a shell script •Can do anything you want •Note:

Page 18CMPSC 311: Introduction to Systems Programming

Pipelines

• Connect stdout of one command to stdin of the next

• echo hello | tr h j

• … | rev

• … | hexdump -C

• … | grep 06

• UNIX philosophy at work!


Recommended