📖 Scenario: You work in a small company that needs to get weather information from an online service. You will write a simple Bash script to interact with a public weather API to get the current temperature for a city.
🎯 Goal: Build a Bash script that fetches weather data from an API and shows the temperature for a specific city.
📋 What You'll Learn
Create a variable with the city name
Create a variable with the API endpoint URL
Use curl to get the weather data
Extract the temperature value from the JSON response using jq
Print the temperature with a friendly message
💡 Why This Matters
🌍 Real World
Many jobs require fetching data from online services using scripts. This project shows how to automate getting live data like weather.
💼 Career
Scripting API calls is a common task for system administrators, developers, and data analysts to automate data retrieval and processing.
Progress0 / 4 steps
1
Set the city variable
Create a Bash variable called CITY and set it to the exact value London.
Bash Scripting
Hint
Use the syntax VARIABLE_NAME="value" to create a variable in Bash.
2
Set the API URL variable
Create a Bash variable called API_URL and set it to the exact value https://api.open-meteo.com/v1/forecast?latitude=51.5074&longitude=-0.1278¤t_weather=true.
Bash Scripting
Hint
Use double quotes to include the full URL string in the variable.
3
Fetch weather data and extract temperature
Use curl with the variable API_URL to get the weather data. Then use jq to extract the current temperature from the JSON path .current_weather.temperature. Save this temperature in a variable called TEMP.
Bash Scripting
Hint
Use $(command) to capture command output into a variable.
Use curl -s to get data silently.
Use jq '.current_weather.temperature' to extract temperature.
4
Print the temperature with a message
Write a echo command to print: "The current temperature in London is X°C", where X is the value stored in the variable TEMP.
Bash Scripting
Hint
Use echo and include the variable ${TEMP} inside the string.
Practice
(1/5)
1. What is the primary tool used in bash scripts to interact with web APIs?
easy
A. sed
B. grep
C. awk
D. curl
Solution
Step 1: Understand the purpose of each tool
curl is used to send HTTP requests, while grep, awk, and sed are text processing tools.
Step 2: Identify the tool for API interaction
Since APIs communicate over HTTP, curl is the correct tool to send requests and receive responses.
Final Answer:
curl -> Option D
Quick Check:
API calls use curl [OK]
Hint: Remember: curl sends web requests in bash [OK]
Common Mistakes:
Confusing text tools like grep with API tools
Using sed or awk for HTTP requests
Thinking bash has a built-in HTTP client
2. Which of the following is the correct syntax to send a GET request to https://api.example.com/data using curl?
easy
A. curl https://api.example.com/data
B. curl --data https://api.example.com/data
C. curl -d https://api.example.com/data
D. curl -X POST https://api.example.com/data
Solution
Step 1: Understand default curl behavior
By default, curl sends a GET request if no method is specified.
Step 2: Analyze options
curl https://api.example.com/data sends a GET request simply by specifying the URL. The other options either specify POST or data, which changes the method.
Final Answer:
curl https://api.example.com/data -> Option A
Quick Check:
Default curl = GET request [OK]
Hint: No method means GET by default in curl [OK]
Common Mistakes:
Using -X POST when GET is needed
Adding -d or --data without POST method
Confusing GET and POST syntax
3. What will be the output of this script snippet?
The curl command uses -s for silent mode and sets the header to accept JSON. It fetches data from the API URL.
Step 2: Analyze the output
The response variable stores the full API response body, which is expected to be JSON. The echo prints this JSON string.
Final Answer:
The raw JSON response from the API -> Option B
Quick Check:
Silent curl with JSON header returns JSON [OK]
Hint: Silent curl (-s) returns response body only [OK]
Common Mistakes:
Expecting HTTP status code instead of body
Thinking -H sets request method
Assuming syntax error due to quotes
4. Identify the error in this script that sends JSON data to an API:
curl -X POST https://api.example.com/update -d '{"name":"John"}' -H 'Content-Type: application/json'
medium
A. The JSON data is not properly escaped
B. The -X POST option is missing
C. The Content-Type header should be text/plain
D. The URL is missing the protocol
Solution
Step 1: Check JSON data quoting
The JSON string uses double quotes inside single quotes, but the inner double quotes are escaped with backslashes, which is unnecessary and can cause errors in bash.
Step 2: Correct quoting for JSON in bash
Use single quotes around JSON without escaping double quotes, or use double quotes outside and escape inner quotes properly.
Final Answer:
The JSON data is not properly escaped -> Option A
Quick Check:
Proper JSON quoting avoids escape errors [OK]
Hint: Use single quotes around JSON to avoid escaping double quotes [OK]
Common Mistakes:
Over-escaping quotes inside JSON
Wrong Content-Type header
Omitting -X POST when sending data
5. You want to write a bash script that sends a POST request with JSON data and saves the HTTP status code to a variable. Which command correctly does this?
hard
A. status=$(curl -X POST https://api.example.com/api -d '{"key":"value"}' -H 'Content-Type: application/json')
B. status=$(curl -X POST -H 'Content-Type: application/json' https://api.example.com/api -d '{"key":"value"}')
C. status=$(curl -X POST -d '{"key":"value"}' -H 'Content-Type: application/json' https://api.example.com/api -w "%{http_code}" -o /dev/null -s)
D. status=$(curl -X POST -d '{"key":"value"}' https://api.example.com/api -H 'Content-Type: application/json' -i)
Solution
Step 1: Understand how to capture HTTP status code
The -w "%{http_code}" option tells curl to output the HTTP status code after the response. The -o /dev/null discards the response body, and -s silences progress.
Step 2: Check command correctness
status=$(curl -X POST -d '{"key":"value"}' -H 'Content-Type: application/json' https://api.example.com/api -w "%{http_code}" -o /dev/null -s) correctly uses all these options and assigns the status code to the variable. Other options either capture the response body or include headers, not just the status code.
Final Answer:
status=$(curl -X POST -d '{"key":"value"}' -H 'Content-Type: application/json' https://api.example.com/api -w "%{http_code}" -o /dev/null -s) -> Option C
Quick Check:
Use -w with -o /dev/null to get status code [OK]
Hint: Use curl -w with -o /dev/null to get only status code [OK]
Common Mistakes:
Capturing full response instead of status code
Missing -w option for status code
Not silencing output with -s
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.