O'Reilly logo

Shell Scripting: Expert Recipes for Linux, Bash, and More by Steve Parker

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Test ([)

The first example in this chapter used the -r test to see if a file exists and is readable. That is a useful test for that example, but there are many more, all documented in the test man page. There is no point in repeating the entire test man page here; rather, look at some useful techniques for getting the best out of test, and selecting the most appropriate test for the task at hand. With so many to choose from, it is common to see shell scripts that go out of their way to replicate the features of test, simply because the writer did not know how useful test can be.

First, let’s admit to the sneaky way in which test is implemented, which explains the spacing rules mentioned at the start of this chapter. test itself is a program, which is usually implemented as a shell builtin command. So although there normally is a /usr/bin/test on the disk, it does not usually get called because the shell’s builtin is found first. Another name for test is [. When [ is called, it requires a ] around its arguments, but otherwise, it does the same work.

type test
test is a shell builtin
$ type [
[ is a shell builtin
$ which test
/usr/bin/test
$ which [
/usr/bin/[
$ ls -il /usr/bin/test /usr/bin/[
33625 -rwxr-xr-x 1 root root 33064 Apr 28  2010 /usr/bin/[
33634 -rwxr-xr-x 1 root root 30136 Apr 28  2010 /usr/bin/test

This example shows that if you call test or [ from bash, you will get bash’s implementation of these. On the disk, you also have test and [ which are very similarly ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required