Fix bluetooth errors

The i variable is edited locally as pipe is used. It results in error
when connecting to a device. The read -r at the last is not working for
some reason so added the read -r for each if case. Removed unused action
variable.
This commit is contained in:
Jeevitha Kannan K S 2024-11-20 00:29:19 +05:30
parent ab7a67087d
commit 1e1ea3c090
No known key found for this signature in database
GPG Key ID: 5904C34A2F7CE333

View File

@ -3,7 +3,6 @@
. ../common-script.sh . ../common-script.sh
. ../common-service-script.sh . ../common-service-script.sh
# Function to check Bluez is installed
setupBluetooth() { setupBluetooth() {
printf "%b\n" "${YELLOW}Installing Bluez...${RC}" printf "%b\n" "${YELLOW}Installing Bluez...${RC}"
if ! command_exists bluetoothctl; then if ! command_exists bluetoothctl; then
@ -25,7 +24,6 @@ setupBluetooth() {
startService bluetooth startService bluetooth
} }
# Function to display the main menu
main_menu() { main_menu() {
while true; do while true; do
clear clear
@ -52,7 +50,6 @@ main_menu() {
done done
} }
# Function to scan for devices
scan_devices() { scan_devices() {
clear clear
printf "%b\n" "${YELLOW}Scanning for devices...${RC}" printf "%b\n" "${YELLOW}Scanning for devices...${RC}"
@ -65,16 +62,14 @@ scan_devices() {
printf "%b\n" "$devices" printf "%b\n" "$devices"
fi fi
printf "%b" "Press any key to return to the main menu..." printf "%b" "Press any key to return to the main menu..."
read -r dummy read -r _
} }
# Function to prompt for MAC address using numbers
prompt_for_mac() { prompt_for_mac() {
action=$1 command=$1
command=$2 prompt_msg=$2
prompt_msg=$3 success_msg=$3
success_msg=$4 failure_msg=$4
failure_msg=$5
while true; do while true; do
clear clear
@ -82,66 +77,67 @@ prompt_for_mac() {
if [ -z "$devices" ]; then if [ -z "$devices" ]; then
printf "%b\n" "${RED}No devices available. Please scan for devices first.${RC}" printf "%b\n" "${RED}No devices available. Please scan for devices first.${RC}"
printf "%b" "Press any key to return to the main menu..." printf "%b" "Press any key to return to the main menu..."
read -r dummy read -r _
return return
fi fi
# Display devices with numbers # Display devices with numbers
device_list=$(echo "$devices" | tr '\n' '\n') device_list="$devices"
i=1 i=1
echo "$device_list" | while IFS= read -r device; do echo "$device_list" | while IFS= read -r device; do
printf "%d. %s\n" "$i" "$device" printf "%d. %s\n" "$i" "$device"
i=$((i + 1)) i=$((i + 1))
done done
printf "%b\n" "0. Exit to main menu" printf "%b\n" "0. Exit to main menu"
printf "%b\n" "$prompt_msg" printf "%b" "$prompt_msg"
read -r choice read -r choice
# Validate the choice count=$(printf "%b" "$device_list" | wc -l)
if echo "$choice" | grep -qE '^[0-9]+$' && [ "$choice" -le "$((i - 1))" ] && [ "$choice" -gt 0 ]; then count=$((count + 1))
if echo "$choice" | grep -qE '^[0-9]+$' && [ -n "$choice" ] && [ "$choice" -le "$count" ] && [ "$choice" -gt 0 ]; then
device=$(echo "$device_list" | sed -n "${choice}p") device=$(echo "$device_list" | sed -n "${choice}p")
mac=$(echo "$device" | awk '{print $2}') mac=$(echo "$device" | awk '{print $2}')
if bluetoothctl info "$mac" > /dev/null 2>&1; then if bluetoothctl info "$mac" > /dev/null 2>&1; then
bluetoothctl "$command" "$mac" && { if bluetoothctl "$command" "$mac"; then
printf "%b\n" "${GREEN}$success_msg${RC}" printf "%b\n" "${GREEN}$success_msg${RC}"
break break
} || { else
printf "%b\n" "${RED}$failure_msg${RC}" printf "%b\n" "${RED}$failure_msg${RC}"
} read -r _
fi
else else
printf "%b\n" "${RED}Invalid MAC address. Please try again.${RC}" printf "%b\n" "${RED}Invalid MAC address. Please try again.${RC}"
read -r _
fi fi
elif [ "$choice" -eq 0 ]; then elif [ "$choice" -eq 0 ]; then
return return
else else
printf "%b\n" "${RED}Invalid choice. Please try again.${RC}" printf "%b\n" "${RED}Invalid choice. Please try again.${RC}"
read -r _
fi fi
done done
printf "%b" "Press any key to return to the main menu..."
read -r dummy
} }
# Function to pair with a device
pair_device() { pair_device() {
prompt_for_mac "pair" "pair" "Enter the number of the device to pair: " "Pairing with device completed." "Failed to pair with device." prompt_for_mac "pair" "Enter the number of the device to pair: " "Pairing with device completed." "Failed to pair with device."
} }
# Function to connect to a device
connect_device() { connect_device() {
prompt_for_mac "connect" "connect" "Enter the number of the device to connect: " "Connecting to device completed." "Failed to connect to device." prompt_for_mac "connect" "Enter the number of the device to connect: " "Connecting to device completed." "Failed to connect to device."
} }
# Function to disconnect from a device
disconnect_device() { disconnect_device() {
prompt_for_mac "disconnect" "disconnect" "Enter the number of the device to disconnect: " "Disconnecting from device completed." "Failed to disconnect from device." prompt_for_mac "disconnect" "Enter the number of the device to disconnect: " "Disconnecting from device completed." "Failed to disconnect from device."
} }
# Function to remove a device
remove_device() { remove_device() {
prompt_for_mac "remove" "remove" "Enter the number of the device to remove: " "Removing device completed." "Failed to remove device." prompt_for_mac "remove" "Enter the number of the device to remove: " "Removing device completed." "Failed to remove device."
} }
# Initialize
checkEnv checkEnv
checkEscalationTool checkEscalationTool
setupBluetooth setupBluetooth