DistributedNetworks DistributedNetworks


Unix Commands  «Prev  Next»
Lesson 4Identifying common errors
ObjectiveExamine errors that involve the if statement.
Programmers commonly introduce problems into their scripts with incorrect if statements and while loops. This lesson looks at a few common problems seen with these statements.

Spacing

The shell is very picky about the spacing of these two commands. When typing in your true/false statement, you must include a space between every piece on the line. You must include all the spaces shown in the if statement and while loop shown below or else you will receive a syntax error.

Basic syntax

Forgetting to include all portions of an if statement or while loop will cause a syntax error and can be difficult to locate in a script. In the script below, the then statement is missing. Indenting your code properly will help you spot this problem in your scripts.
if [ "$ answer " = " yes " ]
echo " hello "
fi

Testing numbers


The shell distinguishes between the –eq and = operators when testing values in an if statement or a while loop. It does the same for –ne and != for inequality. -eq and –ne look at values as numbers, = and != look at values as characters. Using the incorrect operator to test a value is an example of a logic error in your script.
To the –eq operator, the values 05, 0005, “5 “, and “ 5” all represent the number 5. The –eq operator ignores leading zeros and any spaces in the value being tested. With the = operator, these would be four different values because they each involve different characters. –eq and –ne are flexible in interpreting numbers entered by your user.
The –eq and –ne operators are great at interpreting numbers, but terrible with characters. They consider all non-numeric values equal to each other. –eq thinks “yes” equals “maybe” and that “stop” equals “go.” Run the simulation below to see what happens when you mistakenly use –eq instead of = in a program.



The next lesson examines errors commonly found when collecting and processing user input.