Basic Syntax
This section reviews some basic syntactic features of the Bourne shell, in a somewhat arbitrary order.
Lines in shell scripts beginning with number signs are comments:
# Start or stop the lp scheduler
In fact, comments can begin anywhere on a line:
grep ':00*:' /etc/passwd # Check for UID=0 accounts
The first line of a shell script usually looks like this:
#!/bin/sh
This identifies the shell that should run the script, in this case, the Bourne shell. The path location can vary.
Note
The best practice is to begin every shell script with a line
identifying the shell to be used to run it. If this line is not
present, /bin/sh
is assumed.
The Bourne shell offers some syntactic flexibility over other shells. For example, quotes remain in effect across physical lines, as in this example we looked at in Chapter 7:
echo "*** Non-root UID=0 or GID=0 accounts:" grep ':00*:' /etc/passwd | \ awk -F: 'BEGIN {n=0} $1!="root" {print $0 ; n=1} END {if (n==0) print "None found."}'
Note that the arguments to the awk
command extend across three lines, which
is much more readable than forcing them onto a single line.
I/O Redirection
Another construct you’ll see quite often is this redirection of standard output to a file and of standard error to standard output (and thus to the same file):
/usr/lib/lpshut > /dev/null 2>&1
In this case the file is /dev/null, but the concept applies whether output goes to a real disk file, to /dev/console, or gets thrown out.
Note that standard output and error can also be ...
Get Essential System Administration, 3rd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.