test: Testing Files and Strings (Unix Power Tools, 3rd Edition)
35.26. test: Testing Files and Strings
Unix
has a command called test that does a lot of
useful tests. For instance, test can check whether
a file is writable before your script tries to write to it. It can
treat the string in a shell variable as a number and do comparisons
("Is that number less than 1000?").
You can combine tests, too ("If the file exists
and it's readable
and the message number is more than
500..."). Some versions of test
have more tests than others. For a complete list, read your
shell's manual page (if your shell has test built in (Section 1.9))
or the online test(1) manual page.
The test command returns a zero status (Section 35.12) if the
test was true and a nonzero status otherwise, so people usually use
test with
if , while, or
until. Here's a way your program
could check to see if the user has a readable file named
.signature in the home directory:
$HOME Section 35.5, $myname Section 35.28
if test -r $HOME/.signature
then
...Do whatever...
else
echo "$myname: Can't read your '.signature'. Quitting." 1>&2
exit 1
fi
The test
command also lets you test for something that
isn't true. Add an exclamation
point (!) before the condition
you're testing. For example, the following test is
true if the .signature file is
not readable:
if test ! -r $HOME/.signature
then
echo "$myname: Can't read your '.signature'. Quitting." 1>&2
exit 1
fi
Unix
also has a version of test (a link to the same
program, actually) named [. Yes,
that's a left bracket. You can use it
interchangeably with the test command with one
exception: there has to be a matching right bracket
(]) at the end of the test. The second example
above could be rewritten this way:
if [ ! -r $HOME/.signature ]
then
echo "$myname: Can't read your '.signature'. Quitting." 1>&2
exit 1
fi
Be sure to leave space between the brackets and other text. There are
a couple of other common gotchas caused by empty arguments; Section 37.3 and Section 37.4 have
workarounds.
-- JP
35.25. The Bourne Shell set Command35.27. Picking a Name for a New Command
Copyright © 2003 O'Reilly & Associates. All rights reserved.
Wyszukiwarka
Podobne podstrony:
ch35ch35!ch35ch35CH35 (4)ch35CH35ch35ch35ch35ch35ch35ch35ch35ch35#ch35ch35więcej podobnych podstron