107 lines
2.2 KiB
Bash
107 lines
2.2 KiB
Bash
#!/bin/ksh
|
|
|
|
# Sort three variables that may contain any value (numbers and/or literals)
|
|
|
|
# # Variables:
|
|
#
|
|
xl='lions, tigers, and'
|
|
yl='bears, oh my!'
|
|
zl='(from the "Wizard of OZ")'
|
|
|
|
typeset -i xn=77444
|
|
typeset -F yn=-12.0
|
|
typeset -i zn=0
|
|
|
|
# # Functions:
|
|
#
|
|
|
|
# # Function _intoarray(x, y, z, arr) - put 3 variables into arr[]
|
|
#
|
|
function _intoarray {
|
|
typeset _x ; nameref _x="$1"
|
|
typeset _y ; nameref _y="$2"
|
|
typeset _z ; nameref _z="$3"
|
|
typeset _arr ; nameref _arr="$4"
|
|
|
|
_arr=( "${_x}" "${_y}" "${_z}" )
|
|
}
|
|
|
|
# # Function _arraysort(arr) - return sorted array (any type of elements)
|
|
#
|
|
function _arraysort {
|
|
typeset _arr ; nameref _arr="$1"
|
|
typeset _i _j ; integer _i _j
|
|
|
|
_sorttype _arr
|
|
case $? in
|
|
0) # Literal sort
|
|
for (( _i=1; _i<${#_arr[*]}; _i++ )); do
|
|
_val="${_arr[_i]}"
|
|
(( _j = _i - 1 ))
|
|
while (( _j>=0 )) && [[ "${_arr[_j]}" > "${_val}" ]]; do
|
|
_arr[_j+1]="${_arr[_j]}"
|
|
(( _j-- ))
|
|
done
|
|
_arr[_j+1]="${_val}"
|
|
done
|
|
;;
|
|
|
|
1) # Numeric sort
|
|
for (( _i=1; _i<${#_arr[*]}; _i++ )); do
|
|
_val=${_arr[_i]}
|
|
(( _j = _i - 1 ))
|
|
while (( _j>=0 && _arr[_j]>_val )); do
|
|
_arr[_j+1]=${_arr[_j]}
|
|
(( _j-- ))
|
|
done
|
|
_arr[_j+1]=${_val}
|
|
done
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# # Function _sorttype(_arr) - return 0 = Literal sort; 1 = Numeric sort
|
|
#
|
|
function _sorttype {
|
|
typeset _arr ; nameref _arr="$1"
|
|
typeset _i ; integer _i
|
|
|
|
for ((_i=0; _i<${#_arr[*]}; _i++)); do
|
|
[[ ${_arr[_i]} != *(\-)+(\d)*(\.)*(\d) ]] && return 0
|
|
done
|
|
return 1
|
|
}
|
|
|
|
# # Function _outofarray(x, y, z, arr) - Put array elements into x, y, z
|
|
#
|
|
function _outofarray {
|
|
typeset _x ; nameref _x="$1"
|
|
typeset _y ; nameref _y="$2"
|
|
typeset _z ; nameref _z="$3"
|
|
typeset _arr ; nameref _arr="$4"
|
|
|
|
_x="${_arr[0]}"
|
|
_y="${_arr[1]}"
|
|
_z="${_arr[2]}"
|
|
}
|
|
|
|
######
|
|
# main #
|
|
######
|
|
|
|
unset x y z
|
|
printf "Numeric Variables:\n%s\n%s\n%s\n\n" "${xn}" "${yn}" "${zn}"
|
|
typeset -a arrayn
|
|
_intoarray xn yn zn arrayn
|
|
_arraysort arrayn
|
|
_outofarray x y z arrayn
|
|
printf "Sorted Variables:\n%s\n%s\n%s\n\n" "${x}" "${y}" "${z}"
|
|
|
|
unset x y z
|
|
printf "Literal Variables:\n%s\n%s\n%s\n\n" "${xl}" "${yl}" "${zl}"
|
|
typeset -a arrayl
|
|
_intoarray xl yl zl arrayl
|
|
_arraysort arrayl
|
|
_outofarray x y z arrayl
|
|
printf "Sorted Variables:\n%s\n%s\n%s\n\n" "${x}" "${y}" "${z}"
|