[PATCH v2] selftests/cpu-hotplug: Make the script complaint with sh shell

Hubert Mazur posted 1 patch 20 hours ago
.../selftests/cpu-hotplug/cpu-on-off-test.sh  | 74 ++++++++++---------
1 file changed, 40 insertions(+), 34 deletions(-)
[PATCH v2] selftests/cpu-hotplug: Make the script complaint with sh shell
Posted by Hubert Mazur 20 hours ago
The script uses by default the bash shell that is inaccessible in
the x86 embedded devices. This leads to the syntax errors. To mitigate
this, change the interpreter to /bin/sh and rework the prints from echo
to printf to make it more robust and posix compliant. Change the
conditional check for being a root from not existent UID and replace
with command execution "id -u".

Signed-off-by: Hubert Mazur <hmazur@google.com>
---

Changes in v2:
- Fix issues reported with sashiko.dev
  - https://sashiko.dev/#/patchset/20260318080825.3063959-2-hmazur%40google.com
- Make sure the script is compliant with strict posix shells
- Test the script syntax on busybox

Link to v1:
- https://lore.kernel.org/all/20260318080825.3063959-2-hmazur@google.com/

 .../selftests/cpu-hotplug/cpu-on-off-test.sh  | 74 ++++++++++---------
 1 file changed, 40 insertions(+), 34 deletions(-)

diff --git a/tools/testing/selftests/cpu-hotplug/cpu-on-off-test.sh b/tools/testing/selftests/cpu-hotplug/cpu-on-off-test.sh
index 6232a46ca6e1..a91c8e47fe46 100755
--- a/tools/testing/selftests/cpu-hotplug/cpu-on-off-test.sh
+++ b/tools/testing/selftests/cpu-hotplug/cpu-on-off-test.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 
 SYSFS=
@@ -10,8 +10,8 @@ prerequisite()
 {
 	msg="skip all tests:"
 
-	if [ $UID != 0 ]; then
-		echo $msg must be run as root >&2
+	if [ $(id -u) -ne 0 ]; then
+		printf "%s must be run as root\n" "$msg" >&2
 		exit $ksft_skip
 	fi
 
@@ -20,37 +20,37 @@ prerequisite()
 	SYSFS=`mount -t sysfs | head -1 | awk '{ print $3 }'`
 
 	if [ ! -d "$SYSFS" ]; then
-		echo $msg sysfs is not mounted >&2
+		printf "%s sysfs is not mounted\n" "$msg" >&2
 		exit $ksft_skip
 	fi
 
 	if ! ls $SYSFS/devices/system/cpu/cpu* > /dev/null 2>&1; then
-		echo $msg cpu hotplug is not supported >&2
+		printf "%s cpu hotplug is not supported\n" "$msg" >&2
 		exit $ksft_skip
 	fi
 
-	echo "CPU online/offline summary:"
+	printf "CPU online/offline summary:\n"
 	online_cpus=`cat $SYSFS/devices/system/cpu/online`
 	online_max=${online_cpus##*-}
 
-	if [[ "$online_cpus" = "$online_max" ]]; then
-		echo "$msg: since there is only one cpu: $online_cpus"
+	if [ "$online_cpus" = "$online_max" ]; then
+		printf "%s since there is only one cpu: %s\n" "$msg" "$online_cpus"
 		exit $ksft_skip
 	fi
 
 	present_cpus=`cat $SYSFS/devices/system/cpu/present`
 	present_max=${present_cpus##*-}
-	echo "present_cpus = $present_cpus present_max = $present_max"
+	printf "present_cpus = %s,  present_max = %s\n" "$present_cpus" "$present_max"
 
-	echo -e "\t Cpus in online state: $online_cpus"
+	printf "\t Cpus in online state: %s\n" "$online_cpus"
 
 	offline_cpus=`cat $SYSFS/devices/system/cpu/offline`
-	if [[ "a$offline_cpus" = "a" ]]; then
+	if [ "a$offline_cpus" = "a" ]; then
 		offline_cpus=0
 	else
 		offline_max=${offline_cpus##*-}
 	fi
-	echo -e "\t Cpus in offline state: $offline_cpus"
+	printf "\t Cpus in offline state: %s\n" "$offline_cpus"
 }
 
 #
@@ -62,7 +62,7 @@ hotpluggable_cpus()
 
 	for cpu in $SYSFS/devices/system/cpu/cpu*; do
 		if [ -f $cpu/online ] && grep -q $state $cpu/online; then
-			echo ${cpu##/*/cpu}
+			printf "%s\n" "${cpu##/*/cpu}"
 		fi
 	done
 }
@@ -99,39 +99,44 @@ offline_cpu()
 
 online_cpu_expect_success()
 {
+	FUNC="online_cpu_expect_success()"
 	local cpu=$1
 
 	if ! online_cpu $cpu; then
-		echo $FUNCNAME $cpu: unexpected fail >&2
+		printf "%s %s: unexpected fail\n" "$FUNC" "$cpu" >&2
 		retval=1
 	elif ! cpu_is_online $cpu; then
-		echo $FUNCNAME $cpu: unexpected offline >&2
+		printf "%s %s: unexpected offline\n" "$FUNC" "$cpu" >&2
 		retval=1
 	fi
 }
 
 online_cpu_expect_fail()
 {
+
+	FUNC="online_cpu_expect_fail()"
 	local cpu=$1
 
 	if online_cpu $cpu 2> /dev/null; then
-		echo $FUNCNAME $cpu: unexpected success >&2
+		printf "%s %s: unexpected success\n" "$FUNC" "$cpu" >&2
 		retval=1
 	elif ! cpu_is_offline $cpu; then
-		echo $FUNCNAME $cpu: unexpected online >&2
+		printf "%s %s: unexpected online\n" "$FUNC" "$cpu" >&2
 		retval=1
 	fi
 }
 
 offline_cpu_expect_success()
 {
+
+	FUNC="offline_cpu_expect_success()"
 	local cpu=$1
 
 	if ! offline_cpu $cpu; then
-		echo $FUNCNAME $cpu: unexpected fail >&2
+		printf "%s %s: unexpected fail\n" "$FUNC" "$cpu" >&2
 		retval=1
 	elif ! cpu_is_offline $cpu; then
-		echo $FUNCNAME $cpu: unexpected offline >&2
+		printf "%s %s: unexpected offline\n" "$FUNC" "$cpu" >&2
 		retval=1
 	fi
 }
@@ -139,12 +144,13 @@ offline_cpu_expect_success()
 offline_cpu_expect_fail()
 {
 	local cpu=$1
+	FUNC="offline_cpu_expect_fail()"
 
 	if offline_cpu $cpu 2> /dev/null; then
-		echo $FUNCNAME $cpu: unexpected success >&2
+		printf "%s %s: unexpected success\n" "$FUNC" "$cpu" >&2
 		retval=1
 	elif ! cpu_is_online $cpu; then
-		echo $FUNCNAME $cpu: unexpected offline >&2
+		printf "%s %s: unexpected offline\n" "$FUNC" "$cpu" >&2
 		retval=1
 	fi
 }
@@ -182,9 +188,9 @@ while getopts ah opt; do
 		allcpus=1
 		;;
 	h)
-		echo "Usage $0 [ -a ]"
-		echo -e "\t default offline one cpu"
-		echo -e "\t run with -a option to offline all cpus"
+		printf "Usage %s [ -a ]\n" "$0"
+		printf "\t default offline one cpu\n"
+		printf "\t run with -a option to offline all cpus\n"
 		exit
 		;;
 	esac
@@ -195,25 +201,25 @@ prerequisite
 #
 # Safe test (default) - offline and online one cpu
 #
-if [ $allcpus -eq 0 ]; then
-	echo "Limited scope test: one hotplug cpu"
-	echo -e "\t (leaves cpu in the original state):"
-	echo -e "\t online to offline to online: cpu $online_max"
+if [ "$allcpus" -eq 0 ]; then
+	printf "Limited scope test: one hotplug cpu\n"
+	printf "\t (leaves cpu in the original state):\n"
+	printf "\t online to offline to online: cpu %s\n" "$online_max"
 	offline_cpu_expect_success $online_max
 	online_cpu_expect_success $online_max
 
-	if [[ $offline_cpus -gt 0 ]]; then
-		echo -e "\t online to offline to online: cpu $present_max"
+	if [ "$offline_cpus" -gt 0 ]; then
+		printf "\t online to offline to online: cpu %s\n" "$present_max"
 		online_cpu_expect_success $present_max
 		offline_cpu_expect_success $present_max
 		online_cpu $present_max
 	fi
 	exit $retval
 else
-	echo "Full scope test: all hotplug cpus"
-	echo -e "\t online all offline cpus"
-	echo -e "\t offline all online cpus"
-	echo -e "\t online all offline cpus"
+	printf "Full scope test: all hotplug cpus\n"
+	printf "\t online all offline cpus\n"
+	printf "\t offline all online cpus\n"
+	printf "\t online all offline cpus\n"
 fi
 
 online_all_hot_pluggable_cpus
-- 
2.53.0.1018.g2bb0e51243-goog