Skrypt noworoczny :D

Odliczanie do Nowego Roku czas zacząć :smiley:

#!/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

3 polubienia

Ale jaja :slight_smile: petarda