CSE 374 Programming Concepts & Tools

Slides:



Advertisements
Similar presentations
CST8177 awk. The awk program is not named after the sea-bird (that's auk), nor is it a cry from a parrot (awwwk!). It's the initials of the authors, Aho,
Advertisements

Introduction to Unix – CS 21 Lecture 11. Lecture Overview Shell Programming Variable Discussion Command line parameters Arithmetic Discussion Control.
CS Lecture 03 Outline Sed and awk from previous lecture Writing simple bash script Assignment 1 discussion 1CS 311 Operating SystemsLecture 03.
1 CSE 390a Lecture 2 Exploring Shell Commands, Streams, and Redirection slides created by Marty Stepp, modified by Josh Goodwin
23-Jun-15Advanced Programming Spring 2002 bash Henning Schulzrinne Department of Computer Science Columbia University.
Bash, part 2 Prof. Chris GauthierDickey COMP Unix Tools.
CSc 352 Shell Scripts Saumya Debray Dept. of Computer Science
Bash Shell Scripting 10 Second Guide Common environment variables PATH - Sets the search path for any executable command. Similar to the PATH variable.
Shell Scripting Awk (part1) Awk Programming Language standard unix language that is geared for text processing and creating formatted reports but it.
8 Shell Programming Mauro Jaskelioff. Introduction Environment variables –How to use and assign them –Your PATH variable Introduction to shell programming.
An Introduction to Unix Shell Scripting
The UNIX Shell. The Shell Program that constantly runs at terminal after a user has logged in. Prompts the user and waits for user input. Interprets command.
Shell Scripting Todd Kelley CST8207 – Todd Kelley1.
Shell Script Programming. 2 Using UNIX Shell Scripts Unlike high-level language programs, shell scripts do not have to be converted into machine language.
Writing Shell Scripts ─ part 3 CSE 2031 Fall October 2015.
Course materials may not be reproduced in whole or in part without the prior written permission of IBM. 5.1 © Copyright IBM Corporation 2008 Unit 11: Shell.
CSC 352– Unix Programming, Spring 2015 March 2015 Shell Programming (Highlights only)
Chapter 10: BASH Shell Scripting Fun with fi. In this chapter … Control structures File descriptors Variables.
CSE 374 Programming Concepts & Tools Hal Perkins Fall 2015 Lecture 6 – sed, command-line tools wrapup.
1 Printing in Python Every program needs to do some output This is usually to the screen (shell window) Later we’ll see graphics windows and external files.
CSE 374 Programming Concepts & Tools Hal Perkins Fall 2015 Lecture 5 – Regular Expressions, grep, Other Utilities.
Chapter 8: The Bourne Again Shell It’s a command interpreter, it’s a programming language, and it makes a mean martini.
CSE 374 Programming Concepts & Tools Hal Perkins Fall 2015 Lecture 4 – Shell Variables, More Shell Scripts.
CSE 374 Programming Concepts & Tools Hal Perkins Fall 2014 Lecture 3 – I/O Redirection, Shell Scripts.
CS 403: Programming Languages Lecture 20 Fall 2003 Department of Computer Science University of Alabama Joel Jones.
CSE 303 Concepts and Tools for Software Development Richard C. Davis UW CSE – 10/9/2006 Lecture 6 – String Processing.
Bash Scripting CIRC Summer School 2016 Baowei Liu CIRC Summer School 2016 Baowei Liu.
Implementation of a simple shell, xssh
CSE 374 Programming Concepts & Tools
CIRC Winter Boot Camp 2017 Baowei Liu
C-Shell with Functions
CSC 352– Unix Programming, Spring 2016, Final Exam Guide
Agenda Korn Shell Functions Korn Shell Variables
Bash Introduction (adapted from chapters 1 and 2 of bash Cookbook by Albing, Vossing, & Newham) CPTE 440 John Beckett.
Implementation of a simple shell, xssh
CSC 352– Unix Programming, Fall 2012
CAP652 Lecture - Shell Programming
CSE 374 Programming Concepts & Tools
CSE 390a Lecture 5 Intro to shell scripting
CSE 374 Programming Concepts & Tools
CSE 374 Programming Concepts & Tools
Shell Scripting March 1st, 2004 Class Meeting 7.
CSE 374 Programming Concepts & Tools
Variables, Expressions, and IO
The Linux Operating System
Accumulators in Programming
CSE 303 Concepts and Tools for Software Development
Exploring Shell Commands, Streams, and Redirection
Writing Shell Scripts ─ part 3
LING 408/508: Computational Techniques for Linguists
CSE 390a Lecture 2 Exploring Shell Commands, Streams, and Redirection
CSE341: Programming Languages Lecture 8 Lexical Scope and Function Closures Dan Grossman Winter 2013.
Unix Talk #2 (sed).
Exploring Shell Commands, Streams, and Redirection
CSE 390a Lecture 2 Exploring Shell Commands, Streams, and Redirection
HYPERTEXT PREPROCESSOR BY : UMA KAKKAR
CSE 303 Concepts and Tools for Software Development
Linux Shell Script Programming
Intro to shell scripting
CSE 303 Concepts and Tools for Software Development
CSE 303 Concepts and Tools for Software Development
CISC101 Reminders Assignment 3 due next Friday. Winter 2019
Lab 4: Introduction to Scripting
Introducing JavaScript
CSC 352– Unix Programming, Fall, 2011
Winter 2019 CISC101 4/28/2019 CISC101 Reminders
Introduction to Bash Programming, part 3
CISC101 Reminders Assignment 3 due today.
Basic shell scripting CS 2204 Class meeting 7
Exploring Shell Commands, Streams, and Redirection
Presentation transcript:

CSE 374 Programming Concepts & Tools Hal Perkins Winter 2017 Lecture 4 – Shell Variables, More Shell Scripts UW CSE 374 Winter 2017

Where we are We understand most of the bash shell and its “programming language”. Final pieces we’ll consider: Shell variables Defining your own Built-in meanings Exporting Arithmetic For loops End with: A long list of gotchas (some bash-specific; some common to shells) Why long shell scripts are a bad idea, etc. UW CSE 374 Winter 2017

Shell variables We already know a shell has state: current working directory, streams, users, aliases, history. Its state also includes shell variables that hold strings. Always strings even if they are “123” – but you can do math Features: Change variables’ values: foo=blah Add new variables: foo=blah or foo= Use variable: ${foo} (braces sometimes optional) Remove variables: unset foo See what variables “are set”: set Omitted feature: Functions and local variables (see manual) Roughly “all variables are global (visible everywhere)” Only assignment is similar to mainstream “real” programming languages UW CSE 374 Winter 2017

Why variables? Variables are useful in scripts, just like in “normal” programming. “Special” variables affect shell operation. 3 most (?) common: PATH PS1 HOME Some variables make sense only when the shell is reading from a script: $#, $n (where n is an integer), $@, $*, $? UW CSE 374 Winter 2017

Export If a shell runs another program (perhaps a bash script), does the other program “see the current variables that are set”? i.e., are the shell variables part of the initial environment of the new program? It depends. export foo – yes it will see value of foo export -n foo – no it will not see value of foo Default is no If the other program sets an exported variable, does the outer shell see the change? No. Somewhat like “call by value” parameters in conventional languages Remember, each new program (and shell) is launched as a separate process with its own state, environment, etc. UW CSE 374 Winter 2017

Arithmetic Variables are strings, so k=$i+$j is not addition But ((k=$i+$j)) is (and in fact the $ is optional here) So is let k="$i + $j” The shell converts the strings to numbers, silently using 0 as necessary UW CSE 374 Winter 2017

For loops Syntax: for v in w1 w2 ... wn do body done Execute body n times, with v set to wi on ith iteration(Afterwards, v=wn) Why so convenient? Use a filename pattern after in Use list of argument strings after in: "$@” Not “$*” – that doesn’t handle arguments with embedded blanks the way you (usually) want UW CSE 374 Winter 2017

Quoting Does x=* set x to string-holding-asterisk or string-holding-all-filenames? If $x is *, does ls $x list all-files or file named asterisk? Are variables expanded in double-quotes? single-quotes? Could consult the manual, but honestly it’s easier to start a shell and experiment. For example: x="*" echo x echo $x echo "$x" (Double quotes suppress some substitutions) echo ’$x’ (Single quotes suppress all substitutions) ... UW CSE 374 Winter 2017

Gotchas: A very partial list Typo in variable name on left: create new variable oops=7 Typo in variable use: get empty string – ls $oops Use same variable name again: clobber other use HISTFILE=uhoh Spaces in variables: use double-quotes if you mean “one word” Non-number used as number: end up with 0 set f=blah: apparently does nothing (assignment in csh) Many, many more… UW CSE 374 Winter 2017

Shell programming revisited How do Java programming and shell programming compare? The shell: “shorter” convenient file-access, file-tests, program-execution, pipes crazy quoting rules and syntax also interactive Java: none of the previous gotchas local variables, modularity, typechecking, array-checking, . . . real data structures, libraries, regular syntax Rough rule of thumb: Don’t write shell scripts over 200 lines? UW CSE 374 Winter 2017

Treatment of strings Suppose foo is a variable that holds the string hello Moral: In Java, variable-uses are easier than string-constants Opposite in Bash Both biased toward common use Java Bash Use variable (get “hello”) foo $foo The string foo “foo” Assign variable foo = hi foo=hi Concatenation foo + “oo” ${foo}oo Convert to number library call silent and implicit UW CSE 374 Winter 2017

More on shell programming Metapoint: Computer scientists automate and end up accidentally inventing (bad) programming languages. It’s like using a screwdriver as a pry bar. HW3 in part, will be near the limits of what seems reasonable to do with a shell script (and we’ll end up cutting corners as a result) There are plenty of attempts to get “the best of both worlds” in a scripting language: Perl, Python, Ruby, . . . Personal opinion: it raises the limit to 1000 or 10000 lines? Gets you hooked on short programs. Picking the bash shell was a conscious decision to emphasize the interactive side and see “how bad programming can get”. Next: Regular expressions, grep, sed, others. UW CSE 374 Winter 2017

Bottom line Never do something manually if writing a script would save you time Never write a script if you need a large, robust piece of software Some programming languages try to give the “best of both worlds” – you now have seen two extremes that don’t (Java and bash) UW CSE 374 Winter 2017