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