External programs
External programs are often used within shell scripts; there are a few builtin commands (echo
, which
, and test
are commonly builtin), but many useful commands are actually Unix utilities, such as tr
, grep
, expr
and cut
. The back-tick (`)is also often associated with external commands. The back-tick is used to indicate that the enclosed text is to be executed as a command.
$ MYNAME=`grep "^${USER}:" /etc/passwd | cut -d: -f5`
$ echo $MYNAME
Johan Tik
So we see that the backtick simply catches the standard output from any command or set of commands we choose to run. It can also improve performance if you want to run a slow command or set of commands and parse various bits of its output:
#!/bin/sh
find / -name "*.html" -print | grep "/index.html$"
find / -name "*.html" -print | grep "/contents.html$"
This code could take a long time to run, and we are doing it twice! A better solution is:
#!/bin/sh
HTML_FILES=`find / -name "*.html" -print`
echo "$HTML_FILES" | grep "/index.html$"
echo "$HTML_FILES" | grep "/contents.html$"
Note: the quotes around $HTML_FILES
are essential to preserve the newlines between each file listed. Otherwise, grep
will see one huge long line of text, and not one line per file.
This way, we are only running the slow find
once, roughly halving the execution time of the script.
Last updated
Was this helpful?