I have completed everything and one test doesn’t pass. The run the script with H argument.
The output looks perfect but it doesn’t pass.
Here is my elements scropt
#!/bin/bash
PSQL="psql -X --username=freecodecamp --dbname=periodic_table --no-align --tuples-only -c"
if [[ $# -ge 1 ]]
then
if [[ $1 =~ ^[0-9]+$ ]]
then
ELEMENTQUERY=$($PSQL "SELECT atomic_number, symbol, name FROM elements WHERE atomic_number=$1")
IFS="|" read ATOMIC_NUMBER SYMBOL NAME <<< $ELEMENTQUERY
elif [[ ${#1} -le 2 ]]
then
ELEMENTQUERY=$($PSQL "SELECT atomic_number, symbol, name FROM elements WHERE symbol='$1'")
IFS="|" read ATOMIC_NUMBER SYMBOL NAME <<< $ELEMENTQUERY
else
ELEMENTQUERY=$($PSQL "SELECT atomic_number, symbol, name FROM elements WHERE name='$1'")
IFS="|" read ATOMIC_NUMBER SYMBOL NAME <<< $ELEMENTQUERY
fi
if [[ ${#ELEMENTQUERY} -le 0 ]]
then
echo -e "I could not find that element in the database."
else
PROPERTIESQUERY=$($PSQL "SELECT atomic_mass::REAL, melting_point_celsius, boiling_point_celsius, type_id FROM properties WHERE atomic_number=$ATOMIC_NUMBER")
IFS="|" read ATOMIC_MASS MELTING_POINT BOILING_POINT TYPE_ID <<< $PROPERTIESQUERY
TYPE=$($PSQL "SELECT type FROM types WHERE type_id=$TYPE_ID")
echo -e "The element with atomic number $ATOMIC_NUMBER is $NAME ($SYMBOL). It's a $TYPE, with a mass of $ATOMIC_MASS amu. $NAME has a melting point of $MELTING_POINT celsius and a boiling point of $BOILING_POINT celsius."
fi
else
echo "Please provide an element as an argument."
fi
My sql dump here
--
-- PostgreSQL database dump
--
-- Dumped from database version 12.17 (Ubuntu 12.17-1.pgdg22.04+1)
-- Dumped by pg_dump version 12.17 (Ubuntu 12.17-1.pgdg22.04+1)
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
DROP DATABASE periodic_table;
--
-- Name: periodic_table; Type: DATABASE; Schema: -; Owner: postgres
--
CREATE DATABASE periodic_table WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'C.UTF-8' LC_CTYPE = 'C.UTF-8';
ALTER DATABASE periodic_table OWNER TO postgres;
\connect periodic_table
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
SET default_tablespace = '';
SET default_table_access_method = heap;
--
-- Name: elements; Type: TABLE; Schema: public; Owner: freecodecamp
--
CREATE TABLE public.elements (
atomic_number integer NOT NULL,
symbol character varying(2) NOT NULL,
name character varying(40) NOT NULL
);
ALTER TABLE public.elements OWNER TO freecodecamp;
--
-- Name: properties; Type: TABLE; Schema: public; Owner: freecodecamp
--
CREATE TABLE public.properties (
atomic_number integer NOT NULL,
atomic_mass numeric NOT NULL,
melting_point_celsius numeric NOT NULL,
boiling_point_celsius numeric NOT NULL,
type_id integer NOT NULL
);
ALTER TABLE public.properties OWNER TO freecodecamp;
--
-- Name: types; Type: TABLE; Schema: public; Owner: freecodecamp
--
CREATE TABLE public.types (
type_id integer NOT NULL,
type character varying NOT NULL
);
ALTER TABLE public.types OWNER TO freecodecamp;
--
-- Name: types_type_id_seq; Type: SEQUENCE; Schema: public; Owner: freecodecamp
--
CREATE SEQUENCE public.types_type_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER TABLE public.types_type_id_seq OWNER TO freecodecamp;
--
-- Name: types_type_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: freecodecamp
--
ALTER SEQUENCE public.types_type_id_seq OWNED BY public.types.type_id;
--
-- Name: types type_id; Type: DEFAULT; Schema: public; Owner: freecodecamp
--
ALTER TABLE ONLY public.types ALTER COLUMN type_id SET DEFAULT nextval('public.types_type_id_seq'::regclass);
--
-- Data for Name: elements; Type: TABLE DATA; Schema: public; Owner: freecodecamp
--
INSERT INTO public.elements VALUES (1, 'H', 'Hydrogen');
INSERT INTO public.elements VALUES (2, 'He', 'Helium');
INSERT INTO public.elements VALUES (3, 'Li', 'Lithium');
INSERT INTO public.elements VALUES (4, 'Be', 'Beryllium');
INSERT INTO public.elements VALUES (5, 'B', 'Boron');
INSERT INTO public.elements VALUES (6, 'C', 'Carbon');
INSERT INTO public.elements VALUES (7, 'N', 'Nitrogen');
INSERT INTO public.elements VALUES (8, 'O', 'Oxygen');
INSERT INTO public.elements VALUES (9, 'F', 'Fluorine');
INSERT INTO public.elements VALUES (10, 'Ne', 'Neon');
--
-- Data for Name: properties; Type: TABLE DATA; Schema: public; Owner: freecodecamp
--
INSERT INTO public.properties VALUES (2, 4, -272.2, -269, 1);
INSERT INTO public.properties VALUES (3, 6.9, 180.54, 1342, 1);
INSERT INTO public.properties VALUES (4, 9, 1287, 2470, 1);
INSERT INTO public.properties VALUES (5, 10.8, 2075, 4000, 1);
INSERT INTO public.properties VALUES (6, 12, 3550, 4027, 1);
INSERT INTO public.properties VALUES (7, 14, -210.1, -195.8, 1);
INSERT INTO public.properties VALUES (8, 16, -218, -183, 1);
INSERT INTO public.properties VALUES (9, 18.998, -220, -188.1, 2);
INSERT INTO public.properties VALUES (10, 20.18, -248.6, -246.1, 2);
INSERT INTO public.properties VALUES (1, 1.088, -259.1, -252.9, 2);
--
-- Data for Name: types; Type: TABLE DATA; Schema: public; Owner: freecodecamp
--
INSERT INTO public.types VALUES (1, 'metal');
INSERT INTO public.types VALUES (2, 'nonmetal');
INSERT INTO public.types VALUES (3, 'metalloid');
--
-- Name: types_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: freecodecamp
--
SELECT pg_catalog.setval('public.types_type_id_seq', 3, true);
--
-- Name: elements elements_atomic_number_key; Type: CONSTRAINT; Schema: public; Owner: freecodecamp
--
ALTER TABLE ONLY public.elements
ADD CONSTRAINT elements_atomic_number_key UNIQUE (atomic_number);
--
-- Name: elements elements_pkey; Type: CONSTRAINT; Schema: public; Owner: freecodecamp
--
ALTER TABLE ONLY public.elements
ADD CONSTRAINT elements_pkey PRIMARY KEY (atomic_number);
--
-- Name: elements elements_symbol_name_key; Type: CONSTRAINT; Schema: public; Owner: freecodecamp
--
ALTER TABLE ONLY public.elements
ADD CONSTRAINT elements_symbol_name_key UNIQUE (symbol, name);
--
-- Name: properties properties_atomic_number_key; Type: CONSTRAINT; Schema: public; Owner: freecodecamp
--
ALTER TABLE ONLY public.properties
ADD CONSTRAINT properties_atomic_number_key UNIQUE (atomic_number);
--
-- Name: properties properties_pkey; Type: CONSTRAINT; Schema: public; Owner: freecodecamp
--
ALTER TABLE ONLY public.properties
ADD CONSTRAINT properties_pkey PRIMARY KEY (atomic_number);
--
-- Name: types types_pkey; Type: CONSTRAINT; Schema: public; Owner: freecodecamp
--
ALTER TABLE ONLY public.types
ADD CONSTRAINT types_pkey PRIMARY KEY (type_id);
--
-- Name: properties properties_atomic_number_fkey; Type: FK CONSTRAINT; Schema: public; Owner: freecodecamp
--
ALTER TABLE ONLY public.properties
ADD CONSTRAINT properties_atomic_number_fkey FOREIGN KEY (atomic_number) REFERENCES public.elements(atomic_number);
--
-- Name: properties properties_type_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: freecodecamp
--
ALTER TABLE ONLY public.properties
ADD CONSTRAINT properties_type_id_fkey FOREIGN KEY (type_id) REFERENCES public.types(type_id);
--
-- PostgreSQL database dump complete
--
I can’t work this out