diff --git a/package/gluon-core/files/etc/init.d/gluon-core-reconfigure b/package/gluon-core/files/etc/init.d/gluon-core-reconfigure
index 0a56357182b77045123cd38f7c05d4ebe037710d..81b613392405c3d064445593ca8523fc8d358e44 100755
--- a/package/gluon-core/files/etc/init.d/gluon-core-reconfigure
+++ b/package/gluon-core/files/etc/init.d/gluon-core-reconfigure
@@ -6,6 +6,7 @@ START=10
 start() {
 	config_load gluon
 	config_get_bool reconfigure core reconfigure 0
+	# shellcheck disable=SC2154
 	if [ "$reconfigure" = 1 ]; then
 		gluon-reconfigure
 	fi
diff --git a/package/gluon-ebtables-limit-arp/files/etc/init.d/gluon-arp-limiter b/package/gluon-ebtables-limit-arp/files/etc/init.d/gluon-arp-limiter
index 553b4e20faed0fb3d9145cda099fee0284c81219..6e461905d24fb902ded34eeca220b05e4a6dafaf 100755
--- a/package/gluon-ebtables-limit-arp/files/etc/init.d/gluon-arp-limiter
+++ b/package/gluon-ebtables-limit-arp/files/etc/init.d/gluon-arp-limiter
@@ -7,7 +7,7 @@ STOP=90
 start_service() {
 	procd_open_instance
 	procd_set_param command /usr/sbin/gluon-arp-limiter
-	procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}
+	procd_set_param respawn "${respawn_threshold:-3600}" "${respawn_timeout:-5}" "${respawn_retry:-5}"
 
 	procd_set_param stderr 1
 	procd_close_instance
diff --git a/package/gluon-ebtables/files/etc/init.d/gluon-ebtables b/package/gluon-ebtables/files/etc/init.d/gluon-ebtables
index 60add180f687ec08c91272d373bb9bd5c97d7b1e..9a265c0bd32920f1f09831f722fdf009f7de81f0 100755
--- a/package/gluon-ebtables/files/etc/init.d/gluon-ebtables
+++ b/package/gluon-ebtables/files/etc/init.d/gluon-ebtables
@@ -15,11 +15,9 @@
 # Removing a specific rule file:
 # $ /etc/init.d/gluon-ebtables stop /lib/gluon/ebtables/100-mcast-chain
 
-
 START=19
 STOP=91
 
-
 exec_file() {
 	local file="$1"
 
@@ -37,12 +35,10 @@ exec_file() {
 }
 
 exec_all() {
-	local sort_arg="$1"
-
 	local old_ifs="$IFS"
 	IFS='
 '
-	for file in `find /lib/gluon/ebtables -type f | sort $sort_arg`; do
+	for file in $(find /lib/gluon/ebtables -type f | sort "$@"); do
 		exec_file "$file"
 	done
 	IFS="$old_ifs"
@@ -51,7 +47,9 @@ exec_all() {
 
 start() {
 	(
+		# shellcheck disable=SC2030,SC2031,SC2089
 		export EBTABLES_RULE='"ebtables-tiny -t " .. table .. " -A " .. command'
+		# shellcheck disable=SC2030,SC2031,SC2089
 		export EBTABLES_CHAIN='"ebtables-tiny -t " .. table .. "  -N " .. name .. " -P " .. policy'
 
 		# Contains /var/lib/ebtables/lock for '--concurrent'
@@ -59,7 +57,7 @@ start() {
 			mkdir -p /var/lib/ebtables
 
 		if [ -z "$1" ]; then
-			exec_all ''
+			exec_all
 		else
 			exec_file "$1"
 		fi
@@ -68,11 +66,13 @@ start() {
 
 stop() {
 	(
+		# shellcheck disable=SC2030,SC2031,SC2090
 		export EBTABLES_RULE='"ebtables-tiny -t " ..	table .. " -D " .. command'
+		# shellcheck disable=SC2030,SC2031,SC2090
 		export EBTABLES_CHAIN='"ebtables-tiny -t " .. table .. " -X " .. name'
 
 		if [ -z "$1" ]; then
-			exec_all '-r'
+			exec_all -r
 		else
 			exec_file "$1"
 		fi
diff --git a/package/gluon-l3roamd/files/etc/init.d/gluon-l3roamd b/package/gluon-l3roamd/files/etc/init.d/gluon-l3roamd
index 40e4a7ebbf8dc036366bf0ba359af80ac316ef6e..062fa9bfe61d4301d1fe527ef072e0989653423c 100755
--- a/package/gluon-l3roamd/files/etc/init.d/gluon-l3roamd
+++ b/package/gluon-l3roamd/files/etc/init.d/gluon-l3roamd
@@ -27,7 +27,7 @@ reload_service() {
 
 	for i in $(echotol3roamd "get_meshifs"| jsonfilter -e "@.mesh_interfaces[@]")
 	do
-		if ! ubus call network.interface dump | jsonfilter -e "@.interface[@.proto='gluon_mesh' && @.up=true].device"|grep -q $i
+		if ! ubus call network.interface dump | jsonfilter -e "@.interface[@.proto='gluon_mesh' && @.up=true].device" | grep -qxF "$i"
 		then
 			echotol3roamd "del_meshif $i"
 		fi
@@ -35,15 +35,17 @@ reload_service() {
 }
 
 start_service () {
-	local interfaces=$(
-	for dev in $(gluon-list-mesh-interfaces); do echo " -m $dev"; done
-	[ "$(ifstatus local_node | jsonfilter -e '@.up')" = 'true' ] && echo ' -i local-node'
+	local interfaces prefix4 prefix6 localip roamingprefix
+
+	interfaces=$(
+		for dev in $(gluon-list-mesh-interfaces); do echo " -m $dev"; done
+		[ "$(ifstatus local_node | jsonfilter -e '@.up')" = 'true' ] && echo ' -i local-node'
 	)
 
-	local prefix4="$(lua -e 'prefix4 = require("gluon.site").prefix4() if prefix4 then print(" -p " .. prefix4) end')"
-	local prefix6="$(lua -e 'print(" -p " .. require("gluon.site").prefix6())')"
-	local localip="$(uci get network.loopback.ip6addr | cut -d/ -f1)"
-	local roamingprefix="$(lua -e 'print(" -P " .. require("gluon.l3").node_client_prefix6())')"
+	prefix4="$(lua -e 'prefix4 = require("gluon.site").prefix4() if prefix4 then print(" -p " .. prefix4) end')"
+	prefix6="$(lua -e 'print(" -p " .. require("gluon.site").prefix6())')"
+	localip="$(uci get network.loopback.ip6addr | cut -d/ -f1)"
+	roamingprefix="$(lua -e 'print(" -P " .. require("gluon.l3").node_client_prefix6())')"
 
 	/sbin/sysctl -w net.ipv6.neigh.default.gc_thresh1=2
 	/sbin/sysctl -w net.ipv4.neigh.default.gc_thresh1=2
@@ -51,14 +53,17 @@ start_service () {
 	procd_open_instance
 	procd_set_param stdout 1
 	procd_set_param stderr 1
-	procd_set_param respawn ${respawn_threshold:-3660} ${respawn_timeout:-5} ${respawn_retry:-0}
-	procd_set_param command "$PROG" -s /var/run/l3roamd.sock $prefix4 $prefix6 $interfaces -t 254 -a $localip -b br-client $roamingprefix
+	procd_set_param respawn "${respawn_threshold:-3660}" "${respawn_timeout:-5}" "${respawn_retry:-0}"
+	# shellcheck disable=SC2086
+	procd_set_param command "$PROG" -s /var/run/l3roamd.sock "$prefix4" "$prefix6" $interfaces -t 254 -a "$localip" -b br-client "$roamingprefix"
 	procd_close_instance
 }
 
 service_triggers() {
-	local script=$(readlink "$initscript")
-	local name=$(basename "${script:-$initscript}")
+	local script name
+	# shellcheck disable=SC2154
+	script=$(readlink "$initscript")
+	name=$(basename "${script:-$initscript}")
 
 	procd_open_trigger
 	procd_add_raw_trigger 'interface.*' 0 "/etc/init.d/$name" reload
diff --git a/package/gluon-mmfd/files/etc/init.d/mmfd b/package/gluon-mmfd/files/etc/init.d/mmfd
index c6d6f1d65e3ad68a000dfbf1edfa865c46977ca7..4a55981c7ae75acaaa847c3c89b10a19de8f71f9 100755
--- a/package/gluon-mmfd/files/etc/init.d/mmfd
+++ b/package/gluon-mmfd/files/etc/init.d/mmfd
@@ -15,11 +15,13 @@ waitforsocket() {
 
 
 start_service() {
-	local interfaces=$(for dev in $(gluon-list-mesh-interfaces); do echo " -i $dev"; done)
+	local interfaces
+	interfaces=$(for dev in $(gluon-list-mesh-interfaces); do echo " -i $dev"; done)
 
 	procd_open_instance
-	procd_set_param command $DAEMON -s $SOCKET $interfaces
-	procd_set_param respawn ${respawn_threshold:-60} ${respawn_timeout:-1} ${respawn_retry:-0}
+	# shellcheck disable=SC2086
+	procd_set_param command "$DAEMON" -s "$SOCKET" $interfaces
+	procd_set_param respawn "${respawn_threshold:-60}" "${respawn_timeout:-1}" "${respawn_retry:-0}"
 	procd_set_param stderr 1
 	procd_set_param stdout 1
 	procd_close_instance
@@ -30,15 +32,15 @@ mmfd_get_interfaces() {
 }
 
 mmfd_has_interface() {
-	mmfd_get_interfaces | grep -q "^$1$"
+	mmfd_get_interfaces | grep -qxF "$1"
 }
 
 addif() {
-	echo "add_meshif $@" | uc $SOCKET
+	echo "add_meshif $1" | uc $SOCKET
 }
 
 delif() {
-	echo "del_meshif $@" | uc $SOCKET
+	echo "del_meshif $1" | uc $SOCKET
 }
 
 reload_service() {
@@ -46,22 +48,24 @@ reload_service() {
 
 	for i in $(ubus call network.interface dump | jsonfilter -e "@.interface[@.proto='gluon_mesh' && @.up=true].device")
 	do
-		if ! mmfd_has_interface $i; then
-			addif $i
+		if ! mmfd_has_interface "$i"; then
+			addif "$i"
 		fi
 	done
 
 	for i in $(mmfd_get_interfaces)
 	do
-		if ! ubus call network.interface dump | jsonfilter -e "@.interface[@.proto='gluon_mesh' && @.up=true].device" | grep -q "^$i$"; then
-			delif $i
+		if ! ubus call network.interface dump | jsonfilter -e "@.interface[@.proto='gluon_mesh' && @.up=true].device" | grep -qxF "$i"; then
+			delif "$i"
 		fi
 	done
 }
 
 service_triggers() {
-	local script=$(readlink "$initscript")
-	local name=$(basename "${script:-$initscript}")
+	local script name
+	# shellcheck disable=SC2154
+	script=$(readlink "$initscript")
+	name=$(basename "${script:-$initscript}")
 
 	procd_open_trigger
 	procd_add_raw_trigger "interface.*" 0 "/etc/init.d/$name" reload
diff --git a/package/gluon-radv-filterd/files/etc/init.d/gluon-radv-filterd b/package/gluon-radv-filterd/files/etc/init.d/gluon-radv-filterd
index 04906e560dbde850e0ba5e2894c66c878db2b6b7..3694dc00cf0734385b396a64434129c05f6f41b2 100755
--- a/package/gluon-radv-filterd/files/etc/init.d/gluon-radv-filterd
+++ b/package/gluon-radv-filterd/files/etc/init.d/gluon-radv-filterd
@@ -5,11 +5,12 @@ START=50
 DAEMON=/usr/sbin/gluon-radv-filterd
 
 start_service() {
-	local threshold="$(lua -e 'print(require("gluon.site").radv_filterd.threshold(20))')"
+	local threshold
+	threshold="$(lua -e 'print(require("gluon.site").radv_filterd.threshold(20))')"
 
 	procd_open_instance
-	procd_set_param command $DAEMON -i br-client -c RADV_FILTER -t $threshold
-	procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}
+	procd_set_param command "$DAEMON" -i br-client -c RADV_FILTER -t "$threshold"
+	procd_set_param respawn "${respawn_threshold:-3600}" "${respawn_timeout:-5}" "${respawn_retry:-5}"
 	procd_set_param netdev br-client
 	procd_set_param stderr 1
 	procd_close_instance
diff --git a/package/gluon-radvd/files/etc/init.d/gluon-radvd b/package/gluon-radvd/files/etc/init.d/gluon-radvd
index d38b94411cecdfe240c3fef24c8ef2c5ed6da27a..03a4f63a7e75e22095517869ce7422f926084dd7 100755
--- a/package/gluon-radvd/files/etc/init.d/gluon-radvd
+++ b/package/gluon-radvd/files/etc/init.d/gluon-radvd
@@ -7,8 +7,9 @@ start_service() {
 	[ -x /lib/gluon/radvd/arguments ] || return 1
 
 	procd_open_instance
+	# shellcheck disable=SC2046
 	procd_set_param command /usr/sbin/uradvd $(/lib/gluon/radvd/arguments)
-	procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}
+	procd_set_param respawn "${respawn_threshold:-3600}" "${respawn_timeout:-5}" "${respawn_retry:-5}"
 	procd_set_param stderr 1
 	procd_close_instance
 }
diff --git a/package/gluon-respondd/files/etc/init.d/gluon-respondd b/package/gluon-respondd/files/etc/init.d/gluon-respondd
index c7b071eb2e5af51f7cb534cde76045dd28eee61f..229abd972766e778706d2a0df4ca68430488cd9b 100755
--- a/package/gluon-respondd/files/etc/init.d/gluon-respondd
+++ b/package/gluon-respondd/files/etc/init.d/gluon-respondd
@@ -7,21 +7,25 @@ DAEMON=/usr/bin/respondd
 MAXDELAY=10
 
 start_service() {
-	local ifdump="$(ubus call network.interface dump)"
+	local ifdump meshdevs clientdevs
+	ifdump="$(ubus call network.interface dump)"
 
-	local meshdevs=$(for dev in $(echo "$ifdump" | jsonfilter -e "@.interface[@.proto='gluon_mesh' && @.up=true].device"); do echo " -i $dev";done;)
-	local clientdevs=$(for dev in $(echo "$ifdump" | jsonfilter -e "@.interface[@.interface='$(cat /lib/gluon/respondd/client.dev 2>/dev/null)' && @.up=true].device"); do echo " -i $dev -t $MAXDELAY";done;)
+	meshdevs=$(for dev in $(echo "$ifdump" | jsonfilter -e "@.interface[@.proto='gluon_mesh' && @.up=true].device"); do echo " -i $dev"; done)
+	clientdevs=$(for dev in $(echo "$ifdump" | jsonfilter -e "@.interface[@.interface='$(cat /lib/gluon/respondd/client.dev 2>/dev/null)' && @.up=true].device"); do echo " -i $dev -t $MAXDELAY"; done)
 
 	procd_open_instance
-	procd_set_param command $DAEMON -d /usr/lib/respondd -p 1001 -g ff02::2:1001 $meshdevs -g ff05::2:1001 $clientdevs
-	procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}
+	# shellcheck disable=SC2086
+	procd_set_param command "$DAEMON" -d /usr/lib/respondd -p 1001 -g ff02::2:1001 $meshdevs -g ff05::2:1001 $clientdevs
+	procd_set_param respawn "${respawn_threshold:-3600}" "${respawn_timeout:-5}" "${respawn_retry:-5}"
 	procd_set_param stderr 1
 	procd_close_instance
 }
 
 service_triggers() {
-	local script=$(readlink "$initscript")
-	local name=$(basename ${script:-$initscript})
+	local script name
+	# shellcheck disable=SC2154
+	script=$(readlink "$initscript")
+	name=$(basename "${script:-$initscript}")
 
 	procd_open_trigger
 	procd_add_raw_trigger "interface.*" 0 "/etc/init.d/$name" reload
diff --git a/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S13urngd b/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S13urngd
index 1e5ce603d345425bd050d0ce06097b4728e3705a..6e377bc55425d679762c7a2bb02823205d18a20a 100755
--- a/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S13urngd
+++ b/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S13urngd
@@ -1,5 +1,7 @@
 #!/bin/sh /etc/rc.common
 
+# shellcheck disable=SC1091
+
 if [ -x /etc/init.d/urngd ] && /etc/init.d/urngd enabled; then
 	. /etc/init.d/urngd
 fi
diff --git a/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S15gluon-setup-mode b/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S15gluon-setup-mode
index 80127cc4b9203871e031b43d72a7f401216b5dd3..6030b9b2c24823238edefc36ae4cfd86b8aa5154 100755
--- a/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S15gluon-setup-mode
+++ b/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S15gluon-setup-mode
@@ -2,15 +2,15 @@
 
 START=15
 
-
 boot() {
-	local enabled="$(uci -q get 'gluon-setup-mode.@setup_mode[0].enabled')"
-	local configured="$(uci -q get 'gluon-setup-mode.@setup_mode[0].configured')"
+	local enabled configured
+	enabled="$(uci -q get 'gluon-setup-mode.@setup_mode[0].enabled')"
+	configured="$(uci -q get 'gluon-setup-mode.@setup_mode[0].configured')"
 
 	uci set 'gluon-setup-mode.@setup_mode[0].enabled=0'
 	uci commit gluon-setup-mode
 
-	if [ "$enabled" != 1 -a "$configured" = 1 ]; then
+	if [ "$enabled" != 1 ] && [ "$configured" = 1 ]; then
 		# This can happen after an upgrade from a version before the config file was called gluon-setup-mode
 		# We'll just reboot to return to the normal mode...
 		/etc/init.d/done boot
diff --git a/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S50dropbear b/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S50dropbear
index 2bbf1c2992f98c9018147f05cf695eca9e01b7c2..a9e168ad64a0562653bdba6e70a208336b9bca29 100755
--- a/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S50dropbear
+++ b/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S50dropbear
@@ -1,5 +1,7 @@
 #!/bin/sh /etc/rc.common
 
+# shellcheck disable=SC1091
+
 USE_PROCD=1
 PROG=/usr/sbin/dropbear
 NAME=dropbear
diff --git a/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S96led b/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S96led
index c456278f57ad78bbbff4ecc5df5f32dcf76258ff..fb3be6d36890b1d8a9f4089e17a29c906fdbd0c3 100755
--- a/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S96led
+++ b/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S96led
@@ -1,5 +1,7 @@
 #!/bin/sh /etc/rc.common
 
+# shellcheck disable=SC1091,SC2154
+
 START=96
 
 start() {