📖 Scenario: You are writing a simple Bash script that asks the user for their favorite fruit. Sometimes, the user might not enter anything. You want to make sure the script uses a default fruit if the user leaves the input empty.
🎯 Goal: Build a Bash script that asks for user input and uses a default value if the input is empty.
📋 What You'll Learn
Create a variable to store user input
Set a default value if the input is empty
Print the final chosen fruit
💡 Why This Matters
🌍 Real World
Scripts often ask users for input but need to handle cases where the user presses Enter without typing anything. Using default values keeps scripts friendly and reliable.
💼 Career
Knowing how to handle default values in Bash scripts is useful for system administrators and developers who automate tasks and want to make scripts user-friendly.
Progress0 / 4 steps
1
Create a variable to store user input
Write a line to read user input into a variable called fruit using read -p with the prompt "Enter your favorite fruit: ".
Bash Scripting
Hint
Use read -p "prompt" variable to get input from the user.
2
Set a default value if input is empty
Add a line that sets fruit to "apple" if it is empty, using the syntax ${fruit:-apple}.
Bash Scripting
Hint
Use variable=${variable:-default} to assign a default value if the variable is empty.
3
Print the final chosen fruit
Write a line to print the message "Your favorite fruit is: " followed by the value of fruit.
Bash Scripting
Hint
Use echo to display text and variables.
4
Run the script and see the output
Run the script and enter nothing when prompted. The output should be exactly Your favorite fruit is: apple.
Bash Scripting
Hint
Just press Enter without typing anything when prompted.
Practice
(1/5)
1. What does the expression ${name:-Guest} do in a bash script?
easy
A. It throws an error if name is not set.
B. It assigns 'Guest' to name permanently.
C. It deletes the variable name if it is empty.
D. It uses the value of name if set; otherwise, it uses 'Guest' as default.
Solution
Step 1: Understand the syntax ${variable:-default}
This syntax means: use the value of variable if it is set and not empty; otherwise, use default.
Step 2: Apply to ${name:-Guest}
If name is set and not empty, it returns name. If name is unset or empty, it returns 'Guest'.
Final Answer:
It uses the value of name if set; otherwise, it uses 'Guest' as default. -> Option D
Quick Check:
Default value syntax = It uses the value of name if set; otherwise, it uses 'Guest' as default. [OK]
Hint: Use ${var:-default} to provide fallback values [OK]
Common Mistakes:
Thinking it assigns the default permanently
Confusing with ${var:=default} which assigns default
Assuming it throws error if variable unset
2. Which of the following is the correct syntax to read a variable user with a default value 'admin' if input is empty?
easy
A. read user; user=${user:-admin}
B. read user || user=admin
C. read user && user=admin
D. read user ? user=admin
Solution
Step 1: Understand how to read input and set default
The read command takes input into user. To set a default if empty, use user=${user:-admin}.
Step 2: Check each option
read user; user=${user:-admin} correctly reads input then sets default if empty. Options A, C, D use invalid syntax for default assignment.
Final Answer:
read user; user=${user:-admin} -> Option A
Quick Check:
Correct default syntax after read = read user; user=${user:-admin} [OK]
Hint: Use read then assign default with ${var:-default} [OK]
Common Mistakes:
Using || or && incorrectly for default assignment
Trying to assign default inside read command
Using invalid operators like ? for default
3. What is the output of this script if the user presses Enter without typing anything?
read -p "Enter your city: " city
city=${city:-Unknown}
echo "City: $city"
medium
A. City: city
B. City:
C. City: Unknown
D. Error: city not set
Solution
Step 1: Analyze read input behavior
User presses Enter without input, so city is empty string.
Step 2: Apply default value substitution
city=${city:-Unknown} sets city to 'Unknown' because city is empty.
Final Answer:
City: Unknown -> Option C
Quick Check:
Empty input triggers default = City: Unknown [OK]
Hint: Empty input triggers default with ${var:-default} [OK]
Common Mistakes:
Expecting empty output instead of default
Confusing ${var:-default} with ${var-default}
Assuming error occurs on empty input
4. Identify the error in this script snippet:
read name
name=${name=John}
echo "Name: $name"
medium
A. The echo command syntax is wrong
B. The default value syntax is incorrect; should use :- instead of =
C. The variable name is reserved and cannot be used
D. The read command is missing a prompt
Solution
Step 1: Check default value syntax
The script uses ${name=John} which is invalid for default substitution. The correct syntax is ${name:-John}.
Step 2: Confirm other parts
read without prompt is valid, name is a valid variable, and echo syntax is correct.
Final Answer:
The default value syntax is incorrect; should use :- instead of = -> Option B
Quick Check:
Default syntax requires :- not = [OK]
Hint: Use ${var:-default} not ${var=default} for default values [OK]
Common Mistakes:
Using = instead of :- for default values
Thinking read needs a prompt
Confusing variable names with reserved words
5. You want to write a script that asks for a username and a port number. If the user presses Enter without input, the username should default to 'guest' and the port to '8080'. Which script snippet correctly implements this?
hard
A. read -p "Username: " user
user=${user:-guest}
read -p "Port: " port
port=${port:-8080}
echo "User=$user, Port=$port"
B. read -p "Username: " user
user=${user=guest}
read -p "Port: " port
port=${port=8080}
echo "User=$user, Port=$port"
C. read user
if [ -z "$user" ]; then user=guest; fi
read port
if [ -z "$port" ]; then port=8080; fi
echo "User=$user, Port=$port"
D. read user
user=${user:-guest}
read port
port=${port-8080}
echo "User=$user, Port=$port"
Solution
Step 1: Check default value syntax for both variables
read -p "Username: " user
user=${user:-guest}
read -p "Port: " port
port=${port:-8080}
echo "User=$user, Port=$port" uses ${var:-default} which correctly sets default if variable is empty or unset.
Step 2: Verify prompt usage and output
read -p "Username: " user
user=${user:-guest}
read -p "Port: " port
port=${port:-8080}
echo "User=$user, Port=$port" uses read -p to prompt user, then sets defaults, then echoes both variables correctly.
Final Answer:
read -p "Username: " user
user=${user:-guest}
read -p "Port: " port
port=${port:-8080}
echo "User=$user, Port=$port" -> Option A
Quick Check:
Use ${var:-default} with read -p for defaults = read -p "Username: " user
user=${user:-guest}
read -p "Port: " port
port=${port:-8080}
echo "User=$user, Port=$port" [OK]
Hint: Use read -p with ${var:-default} for clean input with defaults [OK]
Common Mistakes:
Using = instead of :- for defaults
Not prompting user with read -p
Using ${var-default} which skips empty but not unset
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.