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" 8value_int="$(bc <<< "ibase=16; $value")" 9result="$(bc <<< "$value_int - $light_delta")" 10if [[ "$result" -lt 0 ]]; then 11result=0 12fi 13if [[ "$result" -gt 255 ]]; then 14result=255 15fi 16echo "$result" 17} 18 19darker() { 20hexinput="$(tr '[:lower:]' '[:upper:]' <<< "$1")" 21light_delta="${2-10}" 22 23a="$(cut -c-2 <<< "$hexinput")" 24b="$(cut -c3-4 <<< "$hexinput")" 25c="$(cut -c5-6 <<< "$hexinput")" 26 27r="$(darker_channel "$a" "$light_delta")" 28g="$(darker_channel "$b" "$light_delta")" 29b="$(darker_channel "$c" "$light_delta")" 30 31printf '%02x%02x%02x\n' "$r" "$g" "$b" 32} 33 34darker "$@" 35