📖 Scenario: You are writing a simple bash script that runs a loop and waits for user interruption. You want to handle the interrupt signal gracefully to clean up before exiting.
🎯 Goal: Build a bash script that uses trap to catch the SIGINT signal (Ctrl+C) and print a friendly message before exiting.
📋 What You'll Learn
Create a variable called count and set it to 0
Create a trap command to catch SIGINT and run a function called handle_interrupt
Define a function called handle_interrupt that prints "Interrupt caught! Exiting..." and exits the script
Create a while loop that increments count every second and prints the current count
Print the final message when the script is interrupted
💡 Why This Matters
🌍 Real World
Signal handling is important in scripts that run continuously or wait for user input. It helps to clean up resources or save state before the script stops.
💼 Career
Many system administration and automation tasks require writing scripts that handle signals to avoid abrupt termination and data loss.
Progress0 / 4 steps
1
Create a counter variable
Create a variable called count and set it to 0.
Bash Scripting
Hint
Use count=0 to create the variable.
2
Set up the trap for SIGINT
Create a trap command to catch the SIGINT signal and run a function called handle_interrupt.
Bash Scripting
Hint
Use trap handle_interrupt SIGINT to catch Ctrl+C.
3
Define the interrupt handler function
Define a function called handle_interrupt that prints "Interrupt caught! Exiting..." and exits the script.
Bash Scripting
Hint
Define the function with handle_interrupt() { ... } and use echo and exit 0.
4
Create the counting loop and print output
Create a while loop that increments count every second and prints the current count using echo. The script should run until interrupted. The output should show the count numbers starting from 1.
Bash Scripting
Hint
Use while true; do ... done, increment count with count=$((count + 1)), print with echo, and pause with sleep 1.
Practice
(1/5)
1. What does the trap command do in a bash script?
easy
A. It creates a loop that repeats commands indefinitely.
B. It catches signals like Ctrl+C and runs specified commands.
C. It defines a function to be used later in the script.
D. It pauses the script until a key is pressed.
Solution
Step 1: Understand the purpose of trap
The trap command is used to catch signals sent to the script, such as Ctrl+C (SIGINT).
Step 2: What trap does with signals
When a signal is caught, trap runs the commands specified by the user to handle that signal.
Final Answer:
It catches signals like Ctrl+C and runs specified commands. -> Option B
Quick Check:
trap catches signals = B [OK]
Hint: Trap runs commands on signals like Ctrl+C [OK]
Common Mistakes:
Thinking trap creates loops
Confusing trap with function definition
Assuming trap pauses script
2. Which of the following is the correct syntax to run echo "Bye" when the script receives a SIGINT signal?
easy
A. trap 'echo "Bye"' SIGINT
B. trap echo "Bye" SIGINT
C. trap (echo "Bye") SIGINT
D. trap {echo "Bye"} SIGINT
Solution
Step 1: Check trap syntax for commands
The commands to run must be quoted as a single string, usually with single quotes to preserve special characters.
Step 2: Identify correct quoting style
trap 'echo "Bye"' SIGINT uses single quotes around the entire command string, which is the correct syntax.
Final Answer:
trap 'echo "Bye"' SIGINT -> Option A
Quick Check:
trap 'commands' SIGNAL = A [OK]
Hint: Use single quotes around commands in trap [OK]
Common Mistakes:
Not quoting commands properly
Using parentheses or braces incorrectly
Omitting quotes causing syntax errors
3. What will be the output of this script when you press Ctrl+C during its execution?
#!/bin/bash
trap 'echo "Interrupted! Cleaning up..."; exit' SIGINT
while true; do
echo "Running..."
sleep 2
done
medium
A. The script ignores Ctrl+C and keeps running.
B. It crashes with an error message.
C. It prints "Running..." once and then exits.
D. It prints "Interrupted! Cleaning up..." and exits.
Solution
Step 1: Understand trap on SIGINT
The trap command catches the SIGINT signal (Ctrl+C) and runs the echo and exit commands.
Step 2: Effect of trap during infinite loop
When Ctrl+C is pressed, the script prints the message and exits immediately, stopping the loop.
Final Answer:
It prints "Interrupted! Cleaning up..." and exits. -> Option D
Quick Check:
trap on SIGINT prints message and exits = D [OK]
Hint: trap runs commands on Ctrl+C, then script exits [OK]
Common Mistakes:
Thinking script ignores Ctrl+C
Assuming loop stops without message
Expecting error instead of clean exit
4. Identify the error in this script snippet:
trap echo "Exiting" SIGTERM
sleep 10
medium
A. sleep command cannot be used with trap.
B. SIGTERM is not a valid signal name.
C. Missing quotes around the command to run in trap.
D. trap must be placed after sleep command.
Solution
Step 1: Check trap command syntax
The command to run on signal must be quoted as a single string to avoid syntax errors.
Step 2: Identify missing quotes
Here, echo "Exiting" is not quoted, so the shell misinterprets the command.
Final Answer:
Missing quotes around the command to run in trap. -> Option C
Quick Check:
trap commands need quotes = C [OK]
Hint: Always quote trap commands to avoid syntax errors [OK]
Common Mistakes:
Not quoting trap commands
Using invalid signal names
Placing trap after commands needing it
5. You want a bash script to delete a temporary file /tmp/mytempfile when it exits, whether normally or due to Ctrl+C. Which trap command correctly achieves this?
hard
A. trap 'rm -f /tmp/mytempfile' EXIT
B. trap 'rm -f /tmp/mytempfile' SIGINT
C. trap 'rm -f /tmp/mytempfile' SIGTERM
D. trap 'rm -f /tmp/mytempfile' SIGINT SIGTERM
Solution
Step 1: Understand EXIT signal
EXIT is a special trap signal that runs commands when the script ends for any reason, including normal exit or Ctrl+C.
Step 2: Why EXIT is better than SIGINT or SIGTERM alone
Using EXIT ensures cleanup runs on all script exits, not just specific signals.
Final Answer:
trap 'rm -f /tmp/mytempfile' EXIT -> Option A
Quick Check:
Use EXIT to clean up on all exits = A [OK]
Hint: Use trap on EXIT to clean up on any script exit [OK]
Common Mistakes:
Using only SIGINT or SIGTERM misses normal exit
Not quoting the command
Expecting multiple signals needed for all exits
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.