Just like any other language, the shell provides if-else statements to handle logic flow. However, the syntax is quite different - let's see how.
Instead of curly braces or indentations to enclose logical constructs, the shell encloses if-statements within its keywords
fi. There is also the
elif keyword that is the shorthand for else-if.
if command; then # If test condition returns exit status of 0 (success) elif another command; then # Another command is true else # Both commands have exit status not 0 fi
Notice anything different from other programming languages? Instead of using some logical expression bound by parentheses, the shell runs commands and checks their exit statuses! This concept may seem foreign and strange at first, but it'll grow on you with practice.
Be sure to get this concept down since it's used in loops as well! It can be confusing since many
if statements use bracket notations
, which look like syntax. However, recall that the open bracket
[ is just a shortcut for the
When stringing together a group of test commands, use the following syntax:
if [ $value -lt 2 ] && [ $value -gt 0 ]; then # value is between 0 and 2 fi
Now that we know enough control flow logic, let's create a simple coin tossing game! We'll have the user pick heads or tails, and the shell toss a coin. If the user is correct, then he/she wins; if not, he/she loses.
Try implementing it on your own with what we have learned thus far, then compare your answer below.
#!/bin/sh printf "Choose (h)eads or (t)ails: " read user_choice # Make sure user chooses between heads or tails if [ $user_choice != h ] && [ $user_choice != t ]; then echo "Invalid choice. Defaulting to (h)eads." user_choice=h fi # Value of 1 is heads, 2 is tails computer_choice=$((RANDOM % 2 + 1)) if [ $computer_choice -eq 1 ]; then echo "Computer chose heads." else echo "Computer chose tails." fi if [ $computer_choice -eq 1 ] && [ $user_choice = h ]; then # Correct echo "You win!" elif [ $computer_choice -eq 1 ] && [ $user_choice = t | ]; then # Incorrect echo "You lose!" elif [ $computer_choice -eq 2 ] && [ $user_choice = t ]; then # Correct echo "You win!" else # Incorrect echo "You lose!" fi
Great! You're well on your way to becoming a shell scripting master. Let's move onto case statements.
Stretch out your back and relieve your back muscles with inversion therapy. This device counteracts the forces of gravity on the body by decompressing and elongating the spine. By using this product just ten minutes a day, you can be well on your way to improved circulation and posture while relieving muscle aches, back pain and stress.$$ Check price
In this completely revised second edition of the perennial best seller How Linux Works, author Brian Ward makes the concepts behind Linux internals accessible to anyone curious about the inner workings of the operating system. Inside, you'll find the kind of knowledge that normally comes from years of experience doing things the hard way.$ Check price