I'm just wondering about test
Linux command.
Is there an output from test -f FILE
that I could grab using a variable?
How do I know whether this test
perform successfully or not?
I'm just wondering about test
Linux command.
Is there an output from test -f FILE
that I could grab using a variable?
How do I know whether this test
perform successfully or not?
The test
command sets its exit code. You can examine the value in $?
but usually you don't have to. Instead, you use a control flow construct such as while
or if
which does this behind the scenes for you.
while test -e "$myfile"; do
if grep -q 'fnord' "$myfile"; then
echo "Success! Play again."
dd if=/dev/urandom count=1 | base64 >"$myfile"
else
break
fi
done
Observe how while
examines the exit code from test
and if
examines the exit code from grep
. Each of these programs -- and generally any useful Unix utility -- is written so that it returns a zero exit code on success, otherwise a non-zero value.
test
is perhaps somewhat odd in that that's all it does. Historically, it was a bit of a kitchen sink to avoid having to burden the shell's syntax with a lot of string and file property tests (which may in retrospect have been a slightly unhappy design decision -- this trips up beginners still today).
You also see a lot of beginners who have not picked up this idiom, and write pretzel code like
test -e "$myfile"
while [ $? -eq 0 ]; do
....
Yo dawg, I hear you like running test
so I run test
to test
the output from the first test
.