Projekt

Allgemein

Profil

Bash countdown » Historie » Version 1

Jeremias Keihsler, 13.01.2017 10:46

1 1 Jeremias Keihsler
h1. Bash countdown
2
3
This uses a few tricks to do what you want:
4
5
* The printf command does NOT append a linefeed automatically unless you tell it to.
6
* Setting IFS to something else lets the shell split things apart into arrays on whatever delimiter you want, in this case , :.
7
* The date command can be used to produce time in seconds.
8
* Carriage returns return the cursor to the beginning of the line without moving to the next line.
9
10
<pre>
11
function countdown
12
{
13
  local OLD_IFS="${IFS}"
14
  IFS=":"
15
  local ARR=( $1 )
16
  local SECONDS=$((  (ARR[0] * 60 * 60) + (ARR[1] * 60) + ARR[2]  ))
17
  local START=$(date +%s)
18
  local END=$((START + SECONDS))
19
  local CUR=$START
20
21
  while [[ $CUR -lt $END ]]
22
  do
23
    CUR=$(date +%s)
24
    LEFT=$((END-CUR))
25
26
    printf "\r%02d:%02d:%02d" \
27
            $((LEFT/3600)) $(( (LEFT/60)%60)) $((LEFT%60))
28
29
            sleep 1
30
  done
31
  IFS="${OLD_IFS}"
32
  echo "        "
33
}
34
35
countdown "00:07:55"
36
</pre>