#!/bin/bash QUERY_STRING=$(echo "${QUERY_STRING}" | sed 's/;//g') urldecode() { local data data="${*//+/ }" echo -e "${data//%/\\x}" } if [ "${QUERY_STRING}" ]; then export IFS="&" for cmd in ${QUERY_STRING}; do if [[ "$cmd" == *=* ]]; then key=$(echo "$cmd" | awk -F '=' '{print $1}') value=$(echo "$cmd" | awk -F '=' '{print $2}') eval "$key"="$(urldecode "$value")" fi done fi phone_number="$number" message_encoded="$msg" phone_number="+86$phone_number" send_at_command() { local cmd=$1 echo "Sending command: $cmd" >&2 echo -en "$cmd\r" | microcom -t 1000 /dev/ttyOUT2 sleep 2 local response=$(microcom -t 1000 /dev/ttyOUT2) echo "Response: $response" >&2 echo "$response" } send_at_command "AT+CMGF=1" send_at_command "AT+CSCS=\"UCS2\"" encode_ucs2() { local input="$1" local output="" local i for ((i=0; i<${#input}; i++)); do hex=$(printf "%04X" "'${input:$i:1}") output="$output$hex" done echo "$output" } phone_number_ucs2=$(encode_ucs2 "$phone_number") ATCMD="AT+CMGS=\"$phone_number_ucs2\"" send_at_command "$ATCMD" runcmd=$((echo -en "$message_encoded"; sleep 1; echo -en "\x1A") | microcom -t 1000 /dev/ttyOUT2) echo "$runcmd"