-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathcountdown.sh
63 lines (57 loc) · 2.7 KB
/
countdown.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/bin/bash
#功能描述(Description):时间倒计时.
#使用Ctrl+C中断脚本或者倒计时结束时显示光标.
trap 'tput cnorm;exit' INT EXIT
#定义数组变量,该数组有9行9个元素,每行是1个元素,每一个数字宽度占用12列.
#循环对数组9个元素进行字串截取,每一个元素提取0-11位就是数字0,
#循环对数组9个元素进行字串截取,每一个元素提取12-23位就是数字1,依此类推.
number=(
' 0000000000 111 2222222222 3333333333 44 44 5555555555 6666666666 777777777 888888888 9999999999 '
' 00 00 11111 22 33 44 44 55 66 77 77 88 88 99 99 '
' 00 00 111111 22 33 44 44 55 66 77 77 88 88 99 99 '
' 00 00 11 22 33 44 44 55 66 77 88 88 99 99 '
' 00 00 11 2222222222 3333333333 44444444444 5555555555 6666666666 77 888888888 9999999999 '
' 00 00 11 22 33 44 55 66 66 77 88 88 99 '
' 00 00 11 22 33 44 55 66 66 77 88 88 99 '
' 00 00 11 22 33 44 55 66 66 77 88 88 99 '
' 0000000000 1111111111 2222222222 3333333333 44 5555555555 6666666666 77 888888888 9999999999 '
)
#通过位置变量获取需要倒计时的时间,并将分钟转换为秒.
translate_time(){
if [ -z "$1" ];then
echo "$0 需要时间参数n"
echo "n:表示需要倒计时的时间,单位为分钟."
exit
fi
sec=$[$1*60] #将分钟转换为秒.
}
#定义函数:打印数组中的某一个数字.
print_time(){
#从第几个位置开始提取数组元素,数字0就从0开始,数字1就从12开始,数字2就从24开始,依此类推.
begin=$[$1*12]
for i in `seq 0 ${#number[@]}` #0-9的循环.
do
tput cup $[i+5] $2
echo -en "\033[91m${number[i]:$begin:12}\033[0m"
done
}
#每秒刷新屏幕,打印新的时间,每循环一次倒计时秒数减1.
translate_time $1
while :
do
[ $sec -lt 0 ] && exit
tput civis #隐藏光标.
tput clear
tput cup 3 16
echo -e "\e[1;32m$1分钟倒计时:\e[0m"
#循环将倒计时秒数中的所有数字提取出来,显示在屏幕.
for j in `seq ${#sec}`
do
num=`echo $sec | cut -c $j`
y=$[j*16]
print_time $num $y
done
let sec--
echo
sleep 1
done