Linux scripting –intro/review

David Morgan

© David Morgan 2012-17

You should already know how to

 log in  run programs at the command line  use pipelines and redirection ( | < > )  put jobs in the background ( & )  create and edit files  make scripts executable ( chmod )

© David Morgan 2012-17

1 software tools

 do one thing well  process lines of text, not binary  use regular expressions  default to standard I/O  aren’t chatty  give same output format as got from input  let someone else do the hard part

© David Morgan 2012-17

let someone do the hard part -- subcontractors

 “The shell’s dependence on other programs to do most of the work is arguably a defect, but also inarguably a strength: you get the concise notation of a plus the speed and efficiency of programs written in (etc.) --Robbins and Beebe p. ix  specialized subcontractor examples – sed – for dynamic editing – – for selective, arbitrary file processing – bc – for arbitrary precision math  they lack the shell’s programming constructs  the shell lacks their specialized capabilities  strategy: employ them in mutual alliance

© David Morgan 2012-17

2 Command shell definition

 a shell is just another program, like cal or ls  defined by what it does – cal: prints a calendar – ls: prints a file list – shell: prompts for commands, tries to run them  running commands for users is what, precisely, makes a shell a shell (and not an editor, browser, or calculator)

© David Morgan 2012-17

What features does a shell have?

Primary! Essential! Must have

 ability to cause a command to run … distant second Nice to have

 whatever other features were coded into it by that shell’s author. If any. I don’t know.

© David Morgan 2012-17

3 Scripting in context Brief feature summary for :  Command processing – parse – expand – execute Scripting: a possible feature that a shell may implement  I/O redirection bash, for example, does (but don’t take it for granted.)  Piping  Environment control  Background processing  Shell scripts

© David Morgan 2012-17

dshell – a feature -poor shell

 causes commands to run (so, it’s a shell!)

 nothing else (certainly not scripting)

© David Morgan 2012-17

4 bash – a feature -rich shell

 causes commands to run (so, it’s a shell!)  but has a zillion times more code doing tons of useful extra things (all optional)

© David Morgan 2012-17

Some other, tutorial shells

 dshell – my dirt-simple shell  simpleshell – http://teaching.idallen.org  csimpleshell – http://rik0.altervista.org/snippets/csimpleshell.html  mini-shell – http://code.google.com/p/mini-shell

© David Morgan 2012-17

5 Bash source code

© David Morgan 2012-17

Prominent “production ” shells

 Korn shell from AT&T  Berkeley  Bourne again shell GNU  Princeton student  Almquist shell Ken Almquist

© David Morgan 2012-17

6 Shells installed on our systems

 ksh   bash  zsh  mksh  dash  yash

© David Morgan 2012-17

ksh KSH-93 is the most recent version of the KornShell by David Korn of AT&T Bell Laboratories. KornShell is a shell programming language, which is upward compatible with "sh" (the ). tcsh Tcsh is an enhanced but completely compatible version of csh, the C shell. Tcsh is a command language interpreter which can be used both as an interactive login shell and as a shell command processor. Tcsh includes a command line editor, programmable word completion, spelling correction, a history mechanism, and a C language like syntax.

© David Morgan 2012-17

7 bash The GNU Bourne Again shell (Bash) is a shell or command language interpreter that is compatible with the Bourne shell (sh). Bash incorporates useful features from the Korn shell (ksh) and the C shell (csh). Most sh scripts can be run by bash without modification. zsh The zsh shell is a command interpreter usable as an interactive login shell and as a command processor. Zsh resembles the ksh shell (the Korn shell), but includes many enhancements. Zsh supports command line editing, built-in spelling correction, programmable command completion, shell functions (with autoloading), a history mechanism, and more.

© David Morgan 2012-17

mksh mksh is the MirBSD enhanced version of the Public Domain Korn shell (pdksh), a bourne-compatible shell which is largely similar to the original AT&T Korn shell. It includes bug fixes and feature improvements in order to produce a modern, robust shell good for interactive and especially script use, being a bourne shell replacement, pdksh successor and an alternative to the C shell. dash DASH is a POSIX-compliant implementation of /bin/sh that aims to be as small as possible. It does this without sacrificing speed where possible. In fact, it is significantly faster than bash (the GNU Bourne-Again SHell) for most tasks.

© David Morgan 2012-17

8 yash Yash is a command line shell that conforms to the POSIX.1 (IEEE Std 1003.1, 2008 Edition) standard for the most part.

Yash also has its own features beyond POSIX, such as: * global aliases * random numbers * socket redirections and other special redirections * right prompt * command completion

© David Morgan 2012-17

Bash conformant -izability

 -- or -o posix  +B get rid of brace expansion  calling bash as /bin/sh softlink

© David Morgan 2012-17

9 Which shell to script for?

 #!/path/to/shell

© David Morgan 2012-17

10