Odliczanie do Nowego Roku czas zacząć
#!/bin/bash
function colorstr() {
local row=$1
local col=$2
local color=$3
local v
case "$color" in
red) v=31;;
green) v=34;;
blue) v=32;;
purple) v=35;;
cyan) v=36;;
yellow) v=33;;
brown) v=33;;
white) v=37;;
*) v=;;
esac
shift 3
if [[ $multiple -ne 0 ]]
then
touch "$lock_file"
while [[ $(ls $lock_file_base.* 2>/dev/null | head -n 1) != "$lock_file" ]]
do
sleep 0.05
done
fi
tput cup "$row" "$col"
echo -n -e "\e[${v}m"
set -f
echo -n "$*"
set +f
if [[ $multiple -ne 0 ]]
then
rm -f "$lock_file"
fi
}
function center_colorstr() {
local row=$1
local color=$2
shift 2
local s="$*"
local slen=${#s}
colorstr "$row" $(((cols / 2) - (slen / 2))) "$color" "$s"
}
function fireworks() {
local row=$((rows - 1))
local col=$(((RANDOM % (cols / 2)) + (cols / 4)))
local height=$((RANDOM % rows - 2))
local slant
local h
local color1=${colors[$((RANDOM % ${#colors[*]}))]}
local color2=${colors[$((RANDOM % ${#colors[*]}))]}
local color3=${colors[$((RANDOM % ${#colors[*]}))]}
while [[ $color1 == "$color2" || $color1 == "$color3" || $color2 == "$color3" ]]
do
color2=${colors[$((RANDOM % ${#colors[*]}))]}
color3=${colors[$((RANDOM % ${#colors[*]}))]}
done
case $((RANDOM % 4)) in
0) slant=-2;;
1) slant=-1;;
2) slant=1;;
3) slant=2;;
esac
if [[ $height -gt 5 ]]
then
h=$height
while [[ $h -gt 0 ]]
do
colorstr $row $col "$color1" '.'
(( row-- ))
if [[ $((col + slant)) -ge $((cols - 3)) || $((col + slant)) -le 2 ]]
then
break
fi
(( col+=slant ))
(( h-- ))
sleep 0.1
done
if [[ $((col + slant)) -lt $((cols - 3)) && $((col + slant)) -gt 2 ]]
then
h=$((height / 5))
while [[ $h -gt 0 ]]
do
colorstr $row $col "$color2" '.'
(( row++ ))
if [[ $((col + slant)) -ge $((cols - 3)) || $((col + slant)) -le 2 ]]
then
break
fi
(( col+=slant ))
(( h-- ))
sleep 0.1
done
fi
colorstr $((row)) $((col - 1)) "$color3" '***'
colorstr $((row - 1)) $((col)) "$color3" '*'
colorstr $((row + 1)) $((col)) "$color3" '*'
fi
}
function runFireworks() {
rows=$(tput lines)
cols=$(tput cols)
colors=(red green blue purple cyan yellow brown)
lock_file=
lock_file_base=/tmp/$(basename "$0" .sh)
multiple=0
if [[ "$1" ]]
then
nmultiple=$1
shift
if [[ $nmultiple -gt 8 ]]
then
nmultiple=8
fi
else
nmultiple=6
fi
clear
until [[ 1 -eq 2 ]]
do
sleep 1
clear
pids=
for i in $(seq 1 "$nmultiple")
do
(( multiple++ ))
lock_file=$lock_file_base.$i
fireworks &
pids="$pids $!"
done
trap 'kill -9 $pids 2>/dev/null' EXIT
wait $pids
done
clear
}
x=$((1672527600-$(date +%s)))
while [[ $x -gt 0 ]]
do
clear
x=$((x-1))
timeleft=$(printf "%02d:%02d:%02d" $((x/3600)) $(( (x/60)%60)) $((x%60)))
gumcolor=$((1 + RANDOM % 15))
if [[ $x -gt 30 ]]
then
gum style --border hidden --padding=5 --margin=5 --width=80 --align=center --bold --foreground=$gumcolor "$timeleft"
else
gumcolor2=$((1 + RANDOM % 15))
gum style --border double --padding=5 --margin=5 --width=80 --align=center --bold --foreground=$gumcolor --border-foreground=$gumcolor2 "$timeleft"
fi
sleep 1
done
runFireworks "$@"
Do uruchomienia poza terminalem i standardowym wyposażeniem każdego Linuksa wymagany również gum, do znalezienia w repozytoriach.
Ukradzione i zmodyfikowane na podstawie: GitHub - BryanLunduke/LundukeHoliday: Lunduke's Holiday BASH Decorations