Skip to content

Instantly share code, notes, and snippets.

@rawiriblundell
Created May 15, 2020 10:56
Show Gist options
  • Save rawiriblundell/acd219e73047cf2fec769cdb97ae6c26 to your computer and use it in GitHub Desktop.
Save rawiriblundell/acd219e73047cf2fec769cdb97ae6c26 to your computer and use it in GitHub Desktop.
A variant of Jozef Sokolowski's is.sh
is() {
[ "${1}" = "not" ] && shift 1; ! is "${@}"; return "${?}"
_condition="${1}"; _var_a="${2}"; _var_b="${3}"
case "${_condition}" in
(-[bcdefghLnprsStuwxz])
test "${_condition}" "${_var_a}"; return "${?}"
;;
(command) command -v "${_var_a}"; return "${?}" ;;
(file) [ -f "${_var_a}" ]; return "${?}" ;;
(dir|directory) [ -d "${_var_a}" ]; return "${?}" ;;
(link|symlink) [ -L "${_var_a}" ]; return "${?}" ;;
(exist|exists) [ -e "${_var_a}" ]; return "${?}" ;;
(readable) [ -r "${_var_a}" ]; return "${?}" ;;
(writeable) [ -w "${_var_a}" ]; return "${?}" ;;
(executable) [ -x "${_var_a}" ]; return "${?}" ;;
(unset) [ -z "${_var_a+x}" ]; return "${?}" ;;
(set)
[ "${_var_a+x}" = "x" ] && [ "${#_var_a}" -gt "0" ]
return "${?}"
;;
(empty|null)
[ "${_var_a+x}" = "x" ] && [ "${#_var_a}" -eq "0" ]
return "${?}"
;;
(blank)
[ -z "${_var_a+x}" ] ||
{
[ "${_var_a+x}" = "x" ] && [ "${#_var_a}" -eq "0" ]
}
return "${?}"
;;
(number|float)
echo "${_var_a}" | grep -E '^[-+]?[0-9]+\.[0-9]*$'; return "${?}" ;;
(int|integer) [ "${_var_a}" -eq "${_var_a}" ]; return "${?}" ;;
(substr|substring)
case "${_var_a}" in
(*"${_var_b}"*) return 0 ;;
(''|*) return 1 ;;
esac
[ -z "$1" ] || { [ -z "${2##*$1*}" ] && [ -n "$2" ];}; return "${?}" ;;
(true)
case "${_var_a}" in
(0|[tT][rR][uU][eE]|[yY][eE][sS]|[oO][nN]) return 0 ;;
(''|*) return 1 ;;
esac
;;
(false)
case "${_var_a}" in
(1|[fF][aA][lL][sS][eE]|[nN][oO]|[oO][fF][fF]) return 0 ;;
(''|*) return 1 ;;
esac
;;
esac > /dev/null 2>&1
return 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment