📖 Scenario: You are writing a simple bash script to run commands and check if they worked correctly. Exit codes help you know if a command succeeded or failed.In real life, this is like checking if a light bulb is working after you install it. If it works, you get a green light (exit code 0). If it doesn't, you get a red light (non-zero exit code).
🎯 Goal: Build a bash script that runs a command, saves its exit code using $?, and prints the exit code to understand if the command succeeded or failed.
📋 What You'll Learn
Create a variable to run a command
Save the exit code of the command using $?
Print the exit code to the terminal
💡 Why This Matters
🌍 Real World
Exit codes are used in scripts to detect errors and decide what to do next, like retrying a command or stopping the script.
💼 Career
Understanding exit codes is essential for writing reliable automation scripts and troubleshooting problems in system administration and DevOps roles.
Progress0 / 4 steps
1
Run a command and save its exit code
Write a line that runs the command ls /tmp and then save its exit code in a variable called exit_code using $?.
Bash Scripting
Hint
Run the command first, then immediately save $? to exit_code.
2
Add a second command and save its exit code
Add a line that runs the command cat /not_exist_file and then save its exit code in a variable called exit_code using $?.
Bash Scripting
Hint
Run the second command and save its exit code just like the first.
3
Print the exit code after the second command
Add a line to print the text Exit code is: followed by the value of the variable exit_code.
Bash Scripting
Hint
Use echo to print the message and the variable.
4
Print exit code after the first command too
Add a line to print the text First command exit code: followed by the exit code of the first command. Save the first command's exit code in a variable called first_exit_code before running the second command.
Bash Scripting
Hint
Save the first exit code before running the second command, then print it.
Practice
(1/5)
1. What does the exit code 0 usually mean in bash scripting?
easy
A. The command is still running
B. The command failed
C. The command was skipped
D. The command was successful
Solution
Step 1: Understand exit codes meaning
In bash, exit code 0 means success, any other number means failure or error.
Step 2: Interpret exit code 0
Since 0 means success, the command completed without errors.
Final Answer:
The command was successful -> Option D
Quick Check:
Exit code 0 = success [OK]
Hint: Exit code 0 means success, anything else means error [OK]
Common Mistakes:
Thinking 0 means failure
Confusing exit code with process ID
Checking $? too late after command
2. Which of the following is the correct way to check the exit code of the last command in bash?
easy
A. echo $exit_code
B. echo $?
C. echo $lastcode
D. echo $status
Solution
Step 1: Recall special variable for exit code
The special variable $? holds the exit code of the last command.
Step 2: Verify correct syntax
Using echo $? prints the exit code correctly.
Final Answer:
echo $? -> Option B
Quick Check:
Use $? to get last exit code [OK]
Hint: Use $? immediately after command to get exit code [OK]
Common Mistakes:
Using undefined variables like $exit_code
Forgetting to check $? right after command
Using $status which is not standard
3. What will be the output of this script?
ls /nonexistent_dir
echo $?
medium
A. 2
B. 0
C. No output
D. ls: cannot access '/nonexistent_dir': No such file or directory
Solution
Step 1: Understand the command behavior
The command ls /nonexistent_dir tries to list a folder that does not exist, so it fails.
Step 2: Check exit code after failure
After failure, $? holds a non-zero exit code, 2 for ls missing directories.
Final Answer:
2 -> Option A
Quick Check:
Failed command exit code ≠ 0 [OK]
Hint: Failed commands return non-zero exit codes like 2 [OK]
Common Mistakes:
Assuming output is 0 for failure
Confusing error message with exit code
Expecting no output from echo
4. Consider this script snippet:
mkdir test_dir
false
if [ $? -eq 0 ]; then
echo "Created"
else
echo "Failed"
fi
What is the problem if the script always prints "Failed" even when the directory is created?
medium
A. mkdir command does not set exit code
B. The syntax of if statement is wrong
C. The $? is checked too late after mkdir
D. echo command overwrites the exit code
Solution
Step 1: Understand exit code timing
The exit code $? must be checked immediately after the command it relates to.
Step 2: Identify delay in checking exit code
If any command runs between mkdir and checking $?, the exit code changes.
Final Answer:
The $? is checked too late after mkdir -> Option C
Quick Check:
Check $? immediately after command [OK]
Hint: Check $? right after command, no commands in between [OK]
Common Mistakes:
Checking $? after other commands
Assuming mkdir never fails
Misunderstanding if syntax
5. You want to run two commands in a script: cmd1 and cmd2. You want to run cmd2 only if cmd1 succeeded (exit code 0). Which is the best way to do this?