darker.sh
Bourne-Again shell script, ASCII text executable
1#!/usr/bin/env bash 2set -ueo pipefail 3#set -x 4 5darker_channel() { 6value="$1" 7light_delta="$2" 8result="$(bc <<< "ibase=16; $value - $light_delta")" 9if [[ "$result" -lt 0 ]]; then 10result=0 11fi 12if [[ "$result" -gt 255 ]]; then 13result=255 14fi 15echo "$result" 16} 17 18darker() { 19hexinput="$(tr '[:lower:]' '[:upper:]' <<< "$1")" 20light_delta="${2-10}" 21 22a="$(cut -c-2 <<< "$hexinput")" 23b="$(cut -c3-4 <<< "$hexinput")" 24c="$(cut -c5-6 <<< "$hexinput")" 25 26r="$(darker_channel "$a" "$light_delta")" 27g="$(darker_channel "$b" "$light_delta")" 28b="$(darker_channel "$c" "$light_delta")" 29 30printf '%02x%02x%02x\n' "$r" "$g" "$b" 31} 32 33darker "$@" 34