#!/bin/zsh
SECONDS=0.8			# 1秒に1ずつ進むシェルのグローバル変数

goal=30
i=1

next1s() {
  n=$SECONDS
  while [[ "$n" = "$SECONDS" ]]; do
    :				# 秒数が変わるまで空ループ
  done
}

while [[ $i -le $goal ]]; do
  next1s
  printf "\n%d\r" $i
  i=$((i+1))
  sleep 0.9			# 次の秒直前まで休む
done &				# 自然数を出し続けるバックグラウンドジョブ

while [[ $i -le $goal ]]; do
  next1s
  sleep 0.01
  [[ $((i%3)) -eq 0 ]] && printf 'Fizz'
  sleep 0.9
  i=$((i+1))
done &				# 3の倍数でバックグラウンド起動

while [[ $i -le $goal ]]; do
  next1s
  sleep 0.02
  [[ $((i%5)) -eq 0 ]] && printf 'Buzz'
  sleep 0.9
  i=$((i+1))
done				# 3と同じく5の倍数でフォアグラウンド起動
