Это должно сработать:
#!/usr/bin/env bash
array=("${@}")
while [[ "${1++}" ]]; do
n=${1}
<<< "${n}" grep -P -e '^(([+-]?)([0-9]+?)(\.?)(([0-9]+?)?))$' > '/dev/null' \
|| { echo "ERROR: '${n}' is not a number"; exit 1; }
shift
done
printf '%s\n' "${array[@]}" | sort -rg
Пример:
$ myscript.sh 12 -45 2 -27.75 2.2 0 +25 100 2.15
100
+25
12
2.2
2.15
2
0
-27.75
-45