mirror of https://dicksdeathabove.xyz/~mia/psh-fc
add -o/-a & !; fix -fl; fix *.0 bug
This commit is contained in:
parent
fd8f2fe231
commit
cc0d5d97a9
5
README
5
README
|
@ -8,6 +8,7 @@ Usage
|
||||||
-- $3 = number
|
-- $3 = number
|
||||||
-- eg:
|
-- eg:
|
||||||
---- 1.89 ^~ 2
|
---- 1.89 ^~ 2
|
||||||
|
---- 1.89 ~ 1
|
||||||
---- 1.5 >/-gt 1.04
|
---- 1.5 >/-gt 1.04
|
||||||
---- 1 </-lt 3.14122
|
---- 1 </-lt 3.14122
|
||||||
---- 1.0051 -ne 1
|
---- 1.0051 -ne 1
|
||||||
|
@ -24,6 +25,10 @@ Operator support:
|
||||||
---- -le/<=/=<: less than or equal to
|
---- -le/<=/=<: less than or equal to
|
||||||
---- -cl/^~/~^/^=: equal after ceiling
|
---- -cl/^~/~^/^=: equal after ceiling
|
||||||
---- -fl/~/≈/≅: equal after floor
|
---- -fl/~/≈/≅: equal after floor
|
||||||
|
-- Additonal support for -a/-o and ! is now present
|
||||||
|
---- -a: literal and
|
||||||
|
---- -o: literal or
|
||||||
|
---- !: literal false
|
||||||
---
|
---
|
||||||
Caveats
|
Caveats
|
||||||
-- note that while no math is used here
|
-- note that while no math is used here
|
||||||
|
|
108
com
108
com
|
@ -7,22 +7,21 @@ set -e # exit 1 if any error
|
||||||
ceil() {
|
ceil() {
|
||||||
# ceiling $1, compare to $2; return 1 if not the same
|
# ceiling $1, compare to $2; return 1 if not the same
|
||||||
[ -z "${1##*.*}" -o ! -z "${2##*.*}" ] && {
|
[ -z "${1##*.*}" -o ! -z "${2##*.*}" ] && {
|
||||||
[ ! -z "${1##*.*}" -a ! -z "${2##*.*}" -a "$1" -eq "$2" ] 2>/dev/null && exit 0
|
[ ! -z "${1##*.*}" -a ! -z "${2##*.*}" -a "$1" -eq "$2" ] 2>/dev/null && return 0
|
||||||
set -- "${1%.*}" "${2%.*}"
|
set -- "${1%.*}" "${2%.*}"
|
||||||
set -- "$(($1+1))" "$2"
|
set -- "$(($1+1))" "$2"
|
||||||
[ "$1" -eq "$2" ] 2>/dev/null && {
|
[ "$1" -eq "$2" ] 2>/dev/null && {
|
||||||
exit 0
|
return 0
|
||||||
} || return 1
|
} || return 1
|
||||||
} || return 1
|
} || return 1
|
||||||
} # ceiling
|
} # ceiling
|
||||||
floor() {
|
floor() {
|
||||||
# floor $1. compare to $2; return 1 if not the same
|
# floor $1. compare to $2; return 1 if not the same
|
||||||
[ -z "${1##*.*}" -o ! -z "${2##*.*}" ] && {
|
[ -z "${1##*.*}" -o ! -z "${2##*.*}" ] && {
|
||||||
[ ! -z "${1##*.*}" -a ! -z "${2##*.*}" -a "$1" -eq "$2" ] 2>/dev/null && exit 0
|
[ ! -z "${1##*.*}" -a ! -z "${2##*.*}" -a "$1" -eq "$2" ] 2>/dev/null && return 0
|
||||||
set -- "${1%.*}" "${2%.*}"
|
set -- "${1%.*}" "${2%.*}"
|
||||||
set -- "$(($1-1))" "$2"
|
|
||||||
[ "$1" -eq "$2" ] 2>/dev/null && {
|
[ "$1" -eq "$2" ] 2>/dev/null && {
|
||||||
exit 0
|
return 0
|
||||||
} || return 1
|
} || return 1
|
||||||
} || return 1
|
} || return 1
|
||||||
} # floor
|
} # floor
|
||||||
|
@ -40,12 +39,12 @@ gt() {
|
||||||
d2="${d2#0}"; d1="${d1}0"
|
d2="${d2#0}"; d1="${d1}0"
|
||||||
done
|
done
|
||||||
[ "$3" ] && {
|
[ "$3" ] && {
|
||||||
[ "$d1" -gt "$d2" -o "$d1" -eq "$d2" -a "$w1" -eq "$w2" ] && {
|
[ "${d1:-0}" -gt "${d2:-0}" -o "${d1:-0}" -eq "${d2:-0}" -a "${w1:-0}" -eq "${w2:-0}" ] && {
|
||||||
exit 0
|
return 0
|
||||||
} || return 1
|
} || return 1
|
||||||
} || {
|
} || {
|
||||||
[ "$d1" -gt "$d2" ] && {
|
[ "${d1:-0}" -gt "${d2:-0}" ] && {
|
||||||
exit 0
|
return 0
|
||||||
} || return 1
|
} || return 1
|
||||||
} # or equal to (-ge)
|
} # or equal to (-ge)
|
||||||
} # test if $1 is > $2
|
} # test if $1 is > $2
|
||||||
|
@ -60,12 +59,12 @@ lt() {
|
||||||
d2="${d2#0}"; d1="${d1}0"
|
d2="${d2#0}"; d1="${d1}0"
|
||||||
done
|
done
|
||||||
[ "$3" ] && {
|
[ "$3" ] && {
|
||||||
[ "$d1" -lt "$d2" -o "$d1" -eq "$d2" -a "$w1" -eq "$w2" ] && {
|
[ "${d1:-0}" -lt "${d2:-0}" -o "${d1:-0}" -eq "${d2:-0}" -a "${w1:-0}" -eq "${w2:-0}" ] && {
|
||||||
exit 0
|
return 0
|
||||||
} || return 1
|
} || return 1
|
||||||
} || {
|
} || {
|
||||||
[ "$d1" -lt "$d2" ] && {
|
[ "${d1:-0}" -lt "${d2:-0}" ] && {
|
||||||
exit 0
|
return 0
|
||||||
} || return 1
|
} || return 1
|
||||||
}
|
}
|
||||||
} # test if $1 is < $2
|
} # test if $1 is < $2
|
||||||
|
@ -79,26 +78,73 @@ eq() { # use $3 for -ne
|
||||||
d2="${d2#0}"; d1="${d1}0"
|
d2="${d2#0}"; d1="${d1}0"
|
||||||
done
|
done
|
||||||
[ "$3" ] && {
|
[ "$3" ] && {
|
||||||
[ "$w1" -ne "$w2" -a "$d1" -ne "$d2" ] && {
|
[ "${w1:-0}" -ne "${w2:-0}" -a "${d1:-0}" -ne "${d2:-0}" ] && {
|
||||||
exit 0
|
return 0
|
||||||
} || return 1
|
} || return 1
|
||||||
} || {
|
} || {
|
||||||
[ "$w1" -eq "$w2" -a "$d1" -eq "$d2" ] && {
|
[ "${w1:-0}" -eq "${w2:-0}" -a "${d1:-0}" -eq "${d2:-0}" ] && {
|
||||||
exit 0
|
return 0
|
||||||
} || return 1
|
} || return 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
n1="$1"; op="$2"; n2="$3"
|
hexit() { # handle exits
|
||||||
case "$op" in
|
# allow for ! handling
|
||||||
'^~'|'~^'|'^='|'-cl') ceil "$n1" "$n2" || exit 1 ;;
|
ecode="$1"
|
||||||
'~'|'≈'|'≅'|'-fl') floor "$n1" "$n2" || exit 1 ;;
|
[ "$FALSE" ] && case "$ecode" in
|
||||||
'>'|'-gt') gt "$n1" "$n2" || exit 1 ;;
|
0) ecode=1 ;;
|
||||||
'<'|'-lt') lt "$n1" "$n2" || exit 1 ;;
|
1) ecode=0
|
||||||
'-ge'|'>='|'=>') gt "$n1" "$n2" "-" || exit 1 ;;
|
esac
|
||||||
'-le'|'<='|'=<') lt "$n1" "$n2" "-" || exit 1 ;;
|
unset FALSE
|
||||||
# or equal to is set via $3
|
case "$@" in
|
||||||
'-eq'|'=='|'=') eq "$n1" "$n2" || exit 1 ;;
|
*'-a'*) [ "$ecode" -eq 0 ] && {
|
||||||
'-ne'|'!=='|'!=') eq "$n1" "$n2" "-" || exit 1
|
args="${@}"; args="${args##*:}"
|
||||||
# -ne uses $3 with -eq
|
${0} ${args##? $op ? -a }; ecode=$?
|
||||||
esac
|
} || exit $ecode ;;
|
||||||
exit 0 # exit 0 if done
|
# if exit code is != 0 then all other calls for -a don't matter
|
||||||
|
# as a single 1 will cause the final result to be 1
|
||||||
|
*'-o'*) [ "$ecode" -eq 1 ] && {
|
||||||
|
args="${@}"; args="${args##*:}"
|
||||||
|
${0} ${args##? $op ? -o }; ecode=$?
|
||||||
|
} || exit $ecode
|
||||||
|
# as above
|
||||||
|
##
|
||||||
|
# this could easily cause a runaway loop if one tried to use an excessive amount of -a/-o calls
|
||||||
|
# but I don't think thats really worth creating an exception for
|
||||||
|
esac
|
||||||
|
exit $ecode
|
||||||
|
}
|
||||||
|
com() { # this allows for recusion for -a/-o handling
|
||||||
|
n1="$1"; op="$2"; n2="$3"
|
||||||
|
[ "$1" ] || exit 1
|
||||||
|
if [ "$1" = '!' ] && [ "$2" ]; then
|
||||||
|
FALSE=0; shift 1
|
||||||
|
n1="$1"; op="$2"; n2="$3"
|
||||||
|
[ "$1" ] || exit 1
|
||||||
|
fi # -a breaks here ??
|
||||||
|
[ ! "$3" ] && {
|
||||||
|
[ "$FALSE" ] && {
|
||||||
|
[ "$2" ] && hexit 0 ":$@"
|
||||||
|
hexit 1 ":$@"
|
||||||
|
} || {
|
||||||
|
[ "$1" ] && hexit 0 ":$@"
|
||||||
|
hexit 1 ":$@"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# [ ! ] causes exit code to swap
|
||||||
|
#echo "$@"
|
||||||
|
case "$op" in
|
||||||
|
'^~'|'~^'|'^='|'-cl') ceil "$n1" "$n2" || hexit 1 ":$@";;
|
||||||
|
'~'|'≈'|'≅'|'-fl') floor "$n1" "$n2" || hexit 1 ":$@";;
|
||||||
|
'>'|'-gt') gt "$n1" "$n2" || hexit 1 ":$@";;
|
||||||
|
'<'|'-lt') lt "$n1" "$n2" || hexit 1 ":$@";;
|
||||||
|
'-ge'|'>='|'=>') gt "$n1" "$n2" "-" || hexit 1 ":$@";;
|
||||||
|
'-le'|'<='|'=<') lt "$n1" "$n2" "-" || hexit 1 ":$@";;
|
||||||
|
# or equal to is set via $3
|
||||||
|
'-eq'|'=='|'=') eq "$n1" "$n2" || hexit 1 ":$@";;
|
||||||
|
'-ne'|'!=='|'!=') eq "$n1" "$n2" "-" || hexit 1 ":$@"
|
||||||
|
# -ne uses $3 with -eq
|
||||||
|
esac
|
||||||
|
hexit 0 ":$@" # exit 0 if done
|
||||||
|
echo "$? --"
|
||||||
|
}
|
||||||
|
com "$@"
|
||||||
|
|
Loading…
Reference in New Issue