diff --git a/firstboot/first-boot-set-hostname.sh b/firstboot/first-boot-set-hostname.sh
index eaabb0a..c238962 100644
--- a/firstboot/first-boot-set-hostname.sh
+++ b/firstboot/first-boot-set-hostname.sh
@@ -1,4 +1,4 @@
-#!/bin/sh -eu
+#!/bin/bash -eu
 
 show_error() {
     if [ -n "${JOURNAL_STREAM-}" ]; then
@@ -17,24 +17,21 @@
     INV_ASSET_IFACE='xyz.openbmc_project.Inventory.Decorator.Asset'
     BMC_SN=''
     BMC_ITEM_PATH=$(busctl --no-pager --verbose call \
-                            ${MAPPER_IFACE} \
-                            ${MAPPER_PATH} \
-                            ${MAPPER_IFACE} \
-                            GetSubTree sias \
-                            ${INVENTORY_PATH} 0 1 ${BMC_ITEM_IFACE} \
-                        2>/dev/null | grep ${INVENTORY_PATH} || true)
+            ${MAPPER_IFACE} ${MAPPER_PATH} ${MAPPER_IFACE} \
+            GetSubTree sias \
+            ${INVENTORY_PATH} 0 1 ${BMC_ITEM_IFACE} \
+        2>/dev/null | grep ${INVENTORY_PATH} || true)
 
     # '     STRING "/xyz/openbmc_project/inventory/system/chassis/bmc";'
     BMC_ITEM_PATH=${BMC_ITEM_PATH#*\"}
     BMC_ITEM_PATH=${BMC_ITEM_PATH%\"*}
 
     BMC_ITEM_SERVICE=$(mapper get-service \
-                                ${BMC_ITEM_PATH} 2>/dev/null || true)
+        "${BMC_ITEM_PATH}" 2>/dev/null || true)
 
     if [[ -n "${BMC_ITEM_SERVICE}" ]]; then
-        BMC_SN=$(busctl get-property ${BMC_ITEM_SERVICE} \
-                            ${BMC_ITEM_PATH} \
-                            ${INV_ASSET_IFACE} SerialNumber)
+        BMC_SN=$(busctl get-property "${BMC_ITEM_SERVICE}" \
+            "${BMC_ITEM_PATH}" "${INV_ASSET_IFACE}" SerialNumber)
         # 's "002B0DH1000"'
         BMC_SN=${BMC_SN#*\"}
         BMC_SN=${BMC_SN%\"*}
@@ -47,34 +44,31 @@
 
         NETWORK_ITEM_IFACE='xyz.openbmc_project.Inventory.Item.NetworkInterface'
         NETWORK_ITEM_PATH=$(busctl --no-pager --verbose call \
-                           ${MAPPER_IFACE} \
-                           ${MAPPER_PATH} \
-                           ${MAPPER_IFACE} \
-                           GetSubTree sias \
-                                ${INVENTORY_PATH} 0 1 ${NETWORK_ITEM_IFACE} \
-                    2>/dev/null | grep ${INVENTORY_PATH} || true)
+                ${MAPPER_IFACE} ${MAPPER_PATH} ${MAPPER_IFACE} \
+                GetSubTree sias \
+                ${INVENTORY_PATH} 0 1 ${NETWORK_ITEM_IFACE} \
+            2>/dev/null | grep ${INVENTORY_PATH} || true)
 
         NETWORK_ITEM_PATH=${NETWORK_ITEM_PATH#*\"}
         NETWORK_ITEM_PATH=${NETWORK_ITEM_PATH%\"*}
 
-        NETWORK_ITEM_OBJ=$(mapper get-service ${NETWORK_ITEM_PATH} 2>/dev/null || true)
+        NETWORK_ITEM_OBJ=$(mapper get-service "${NETWORK_ITEM_PATH}" 2>/dev/null || true)
 
         if [[ -z "${NETWORK_ITEM_OBJ}" ]]; then
             show_error 'No Ethernet interface found in the Inventory. Unique hostname not set!'
             exit 1
         fi
 
-        MAC_ADDR=$(busctl get-property ${NETWORK_ITEM_OBJ} \
-                               ${NETWORK_ITEM_PATH} \
-                               ${NETWORK_ITEM_IFACE} MACAddress)
+        MAC_ADDR=$(busctl get-property "${NETWORK_ITEM_OBJ}" \
+            "${NETWORK_ITEM_PATH}" "${NETWORK_ITEM_IFACE}" MACAddress)
 
         # 's "54:52:01:02:03:04"'
         MAC_ADDR=${MAC_ADDR#*\"}
         MAC_ADDR=${MAC_ADDR%\"*}
 
-        hostnamectl set-hostname $(hostname)-${MAC_ADDR}
+        hostnamectl set-hostname "$(hostname)-${MAC_ADDR}"
     else
-        hostnamectl set-hostname $(hostname)-${BMC_SN}
+        hostnamectl set-hostname "$(hostname)-${BMC_SN}"
     fi
 
 }
diff --git a/firstboot/first-boot-set-mac.sh b/firstboot/first-boot-set-mac.sh
index 63a4ad7..1a1ae22 100644
--- a/firstboot/first-boot-set-mac.sh
+++ b/firstboot/first-boot-set-mac.sh
@@ -1,4 +1,4 @@
-#!/bin/sh -eu
+#!/bin/bash -eu
 
 show_error() {
     if [ -n "${JOURNAL_STREAM-}" ]; then
@@ -17,31 +17,25 @@
 
     # Get the NETWORK ITEM count
     NETWORK_ITEM_PATH_COUNT=$(busctl --no-pager --verbose call \
-                            ${MAPPER_IFACE} \
-                            ${MAPPER_PATH} \
-                            ${MAPPER_IFACE} \
-                            GetSubTree sias \
-                            ${INVENTORY_PATH} 0 1 ${NETWORK_ITEM_IFACE} \
-                        2>/dev/null | grep ${INVENTORY_PATH} | wc -l || true)
+            ${MAPPER_IFACE} ${MAPPER_PATH} ${MAPPER_IFACE} \
+            GetSubTree sias \
+            ${INVENTORY_PATH} 0 1 ${NETWORK_ITEM_IFACE} \
+        2>/dev/null | grep -c "${INVENTORY_PATH}" || true)
 
-    if [ $NETWORK_ITEM_PATH_COUNT -gt 1 ]; then
+    if [ "$NETWORK_ITEM_PATH_COUNT" -gt 1 ]; then
         # If there are more than 2 NETOWRK ITEM and path must contain $1
         # for finding the right NETWORK ITEM
         NETWORK_ITEM_PATH=$(busctl --no-pager --verbose call \
-                            ${MAPPER_IFACE} \
-                            ${MAPPER_PATH} \
-                            ${MAPPER_IFACE} \
-                            GetSubTree sias \
-                            ${INVENTORY_PATH} 0 1 ${NETWORK_ITEM_IFACE} \
-                        2>/dev/null | grep ${INVENTORY_PATH} | grep $1 || true)
+                ${MAPPER_IFACE} ${MAPPER_PATH} ${MAPPER_IFACE} \
+                GetSubTree sias \
+                ${INVENTORY_PATH} 0 1 ${NETWORK_ITEM_IFACE} \
+            2>/dev/null | grep ${INVENTORY_PATH} | grep "$1" || true)
     else
         NETWORK_ITEM_PATH=$(busctl --no-pager --verbose call \
-                            ${MAPPER_IFACE} \
-                            ${MAPPER_PATH} \
-                            ${MAPPER_IFACE} \
-                            GetSubTree sias \
-                            ${INVENTORY_PATH} 0 1 ${NETWORK_ITEM_IFACE} \
-                        2>/dev/null | grep ${INVENTORY_PATH} || true)
+                ${MAPPER_IFACE} ${MAPPER_PATH} ${MAPPER_IFACE} \
+                GetSubTree sias \
+                ${INVENTORY_PATH} 0 1 ${NETWORK_ITEM_IFACE} \
+            2>/dev/null | grep ${INVENTORY_PATH} || true)
     fi
 
     # '     STRING "/xyz/openbmc_project/inventory/system/chassis/ethernet";'
@@ -49,16 +43,15 @@
     NETWORK_ITEM_PATH=${NETWORK_ITEM_PATH%\"*}
 
     NETWORK_ITEM_SERVICE=$(mapper get-service \
-                                ${NETWORK_ITEM_PATH} 2>/dev/null || true)
+        "${NETWORK_ITEM_PATH}" 2>/dev/null || true)
 
     if [[ -z "${NETWORK_ITEM_SERVICE}" ]]; then
         show_error 'No Ethernet interface found in the Inventory. Is VPD EEPROM empty?'
         return
     fi
 
-    MAC_ADDR=$(busctl get-property ${NETWORK_ITEM_SERVICE} \
-                                ${NETWORK_ITEM_PATH} \
-                                ${NETWORK_ITEM_IFACE} MACAddress)
+    MAC_ADDR=$(busctl get-property "${NETWORK_ITEM_SERVICE}" \
+        "${NETWORK_ITEM_PATH}" "${NETWORK_ITEM_IFACE}" MACAddress)
 
     # 's "54:52:01:02:03:04"'
     MAC_ADDR=${MAC_ADDR#*\"}
@@ -66,9 +59,9 @@
 
     if [[ -n "${MAC_ADDR}" ]]; then
         busctl set-property xyz.openbmc_project.Network \
-                            /xyz/openbmc_project/network/$1 \
-                            xyz.openbmc_project.Network.MACAddress \
-                            MACAddress s ${MAC_ADDR}
+            "/xyz/openbmc_project/network/$1" \
+            xyz.openbmc_project.Network.MACAddress \
+            MACAddress s "${MAC_ADDR}"
     fi
 }
 
@@ -77,7 +70,7 @@
     exit 1
 fi
 
-sync_mac $1
+sync_mac "$1"
 
 # Prevent start at next boot time
 mkdir -p "/var/lib/first-boot-set-mac"
