📖 Scenario: You are writing a small shell script to automate a simple task on your computer. You want to make sure the script stops if any command fails and also want to see each command printed as it runs to understand what is happening.
🎯 Goal: Learn how to use the shell options set -e to stop the script on errors and set -x to print commands as they run.
📋 What You'll Learn
Create a shell script with a few commands
Add set -e to stop on errors
Add set -x to print commands as they run
Observe the script behavior with these options
💡 Why This Matters
🌍 Real World
Shell scripts often automate tasks on computers. Using <code>set -e</code> helps avoid continuing after errors, and <code>set -x</code> helps see what the script is doing step-by-step.
💼 Career
Many IT, DevOps, and developer jobs require writing and debugging shell scripts. Knowing these options helps write safer and easier-to-debug scripts.
Progress0 / 4 steps
1
Create a simple shell script with commands
Create a shell script called script.sh with these exact commands in order: echo "Start script", ls /tmp, and echo "End script".
Linux CLI
Hint
Write each command on its own line exactly as shown.
2
Add set -e to stop script on errors
Add the line set -e at the top of script.sh to make the script stop if any command fails.
Linux CLI
Hint
Place set -e as the very first line in the script.
3
Add set -x to print commands as they run
Add the line set -x immediately after set -e in script.sh to print each command before it runs.
Linux CLI
Hint
Put set -x right after set -e at the top.
4
Run the script and observe the output
Run bash script.sh in the terminal and observe that each command is printed before it runs and the script stops if a command fails.
Linux CLI
Hint
Use bash script.sh to run the script and watch the commands printed with a plus sign (+) before each.
Practice
(1/5)
1. What does the shell option set -e do in a script?
easy
A. Stops the script immediately if any command returns an error
B. Prints each command before executing it
C. Ignores all errors and continues running
D. Runs the script in the background
Solution
Step 1: Understand the purpose of set -e
This option makes the shell stop running the script if any command fails (returns a non-zero exit code).
Step 2: Compare with other options
set -x prints commands, but set -e stops on errors, so stopping on error is correct.
Final Answer:
Stops the script immediately if any command returns an error -> Option A
Quick Check:
set -e stops on error [OK]
Hint: Remember: 'e' for error stop [OK]
Common Mistakes:
Confusing set -e with set -x
Thinking it ignores errors
Assuming it runs commands silently
2. Which of the following is the correct way to enable both set -e and set -x in a shell script?
easy
A. set -x e
B. set -xe
C. set e -x
D. set -e x
Solution
Step 1: Understand combined options syntax
Shell options can be combined after a single dash, order does not matter, so set -xe works.
Step 2: Check options with spaces
set e -x is invalid syntax, and set -x e or set -e x set only one option.
Final Answer:
set -xe -> Option B
Quick Check:
Combine options after one dash [OK]
Hint: Combine flags after one dash, order doesn't matter [OK]
Common Mistakes:
Using spaces between flags incorrectly
Writing flags without dashes
Assuming order matters
3. Given this script snippet with set -e enabled:
set -e
mkdir /tmp/mydir
cd /tmp/mydir
false
echo "This will not print"
What will be the output when running this script?
medium
A. Fails at mkdir and stops immediately
B. Creates directory, changes directory, prints 'This will not print'
C. Creates directory, changes directory, then stops at false; no echo output
D. Runs all commands including echo
Solution
Step 1: Trace commands with set -e
The script creates /tmp/mydir, changes into it, then runs false which returns error (non-zero).
Step 2: Effect of set -e on error
Because set -e stops on any error, the script stops after false and does not run the echo command.
Final Answer:
Creates directory, changes directory, then stops at false; no echo output -> Option C
Quick Check:
set -e stops script on error [OK]
Hint: Remember: script stops at first error with set -e [OK]
Common Mistakes:
Assuming echo runs after error
Thinking mkdir fails by default
Ignoring effect of set -e
4. You have this script:
#!/bin/bash
set -x
ls /nonexistent
pwd
What is the problem and how to fix it so the script continues after the error?
medium
A. No problem; script runs all commands
B. Problem: script stops on error; fix by removing set -x
C. Problem: script prints commands; fix by removing set -x
D. Problem: script stops on error; fix by removing set -e (not set here)
Solution
Step 1: Analyze script options
The script uses set -x which prints commands but does not stop on errors. There is no set -e so script continues despite ls error and runs pwd.
Step 2: Identify problem and fix
Script already continues after error since no set -e. No problem exists.
Final Answer:
No problem; script runs all commands -> Option A
Quick Check:
set -x prints commands, set -e stops on error [OK]
Hint: Remember: set -x prints, set -e stops [OK]
Common Mistakes:
Confusing set -x with set -e
Assuming set -x stops script
Ignoring missing set -e
5. You want to debug a script that sometimes fails silently. Which combination of shell options helps you see each command as it runs and stops immediately on errors?
hard
A. set -e only
B. set -x e
C. set -x only
D. set -ex
Solution
Step 1: Understand debugging needs
To debug, you want to see commands as they run (set -x) and stop on errors (set -e).
Step 2: Combine options correctly
set -ex enables both correctly.
Final Answer:
set -ex -> Option D
Quick Check:
Show commands and stop on error = set -ex [OK]
Hint: Use both -e and -x together to debug safely [OK]
Common Mistakes:
Using only one option and missing the other
Thinking order matters strictly
Confusing which option stops or prints
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.