Yes. Whenever the tar-command returns a non-zero value the part between "then" and "fi" (or, in case an else-branch is there, the "then and the "else") is executed. In your case, since there is a "mail"-command and an "rm"-command it will do exactly that.
You are not annoying us because of your questions. What is really annoying is the way you constantly ignore what we say about indenting. Believe me, i have written several hundred thousands lines of code in my life (and Don, i believe, something in the same order of magnitude) and i can tell you that it is absolutely necessary! I wrote programs in Assembler, C, FORTRAN, Clipper, and some interpreted languages (mostly shells) and this was constant in all of them!
If you do not understand how to indent properly: say so. We will explain it to you. But to simply ignore our many suggestions, THAT is really annoying - because it creates a feeling that what we do is in vain.
Here is a simple procedure how to indent properly (in every language):
Indentation is for making stand out two sorts of statements: conditionally executed ones and loop contents. Here is how a loop should look like:
loop-command (while, for, until, repeat, ....)
command to execute every iteration of the loop 1
command to execute every iteration of the loop 2
command to execute every iteration of the loop 3
[...]
end-loop command
What you see instantly is: 1) where the loop starts and 2) where it ends and 3) what it consists of (the "loops body").
Here is a real-world example in shell:
(( i = 1 ))
while [ $i -le 100 ] ; do
echo "i is now: $1"
(( i = i + 1 ))
done
Now, this is my style of doing it, Don Cragun does it a bit different (but equally correct - that is a matter of personal taste):
(( i = 1 ))
while [ $i -le 100 ]
do
echo "i is now: $1"
(( i = i + 1 ))
done
Now the conditionals: the same principle applies. Whatever is causing the condition (the "if"-part) is put into a line, then everything between that and the else-line is indented, the "else" itself is at the same level as the "if" and then everything else is indented again until the end of the "if":
if <some-condition>
command executed if condition is true 1
command executed if condition is true 2
command executed if condition is true 3
[...]
else
command executed if condition is false 1
command executed if condition is false 2
command executed if condition is false 3
[...]
end-if
Here is a real-world example, this time not in shell but in C:
if (a < b ) {
printf( "a is smaller than b\n" );
a += 1;
} else {
printf( "a is NOT smaller than b\n" );
b += 1;
}
Notice again how the important parts - which condition everything is based upon ("a < b"), which part is executed when and where each part begins and ends - stand out.
Most programming languages allow to "chain" if-statements. Altough it is not necessary i always align the various conditions horizontally so that they start at the same column. I find that easier to keep track of:
if [ $x -eq 1 ] ; then
echo "x is 1"
elif [ $x -eq 2 ] ; then
echo "x is 2"
else
echo "x is neither 1 nor 2"
fi
Finally there is another conditional in most programming languages: "case" (or, in C, "switch"). It allows for several branches depending on various values of a single variable or expression. The syntax differs from language to language, but the sctructure is always the same:
case <expression>
first-possible-value)
command 1 to execute if expression is "first-possible-value"
command 2 to execute if expression is "first-possible-value"
command 3 to execute if expression is "first-possible-value"
[...]
second-possible-value)
command 1 to execute if expression is "second-possible-value"
command 2 to execute if expression is "second-possible-value"
command 3 to execute if expression is "second-possible-value"
[...]
third-possible-value)
[...]
end-of-case
Here is the chained if-else-construct from above, this time with a "case":
case $x in
1)
echo "x has the value 1"
;;
2)
echo "x has the value 2"
;;
*)
echo "x has neither the value 1 nor 2"
;;
esac
Notice how the important parts spring right into your eyes: the beginning and end of the construct, the various possible values (1, 2, *) and what part of the code is to be executed if these were to be the case (again, with the beginning and the ending of each).
Finally: you define some "indenting step" for yourself. Pick anything you are comfortable with. I prefer 5 spaces because i like the clear picture it gives. On the other hand you start pretty soon to get far right if you have many indentation steps. Some prefer only 3 spaces, some even two. One can nest more levels with less indentation but at the same time different parts of the code are not separated as clearly as with more indentation. Find your own optimum but FIND one. Do NOT write code the way you do because you will hate yourself once you have to correct or change your own programs after a while.
I hope this helps.
bakunin