-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathclock.sh
71 lines (64 loc) · 3 KB
/
clock.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
64
65
66
67
68
69
70
71
#!/bin/bash
#功能描述(Description):通过tput定位光标,在屏幕特定位置打印当前的计算机时间.
#使用Ctrl+C中断脚本时显示光标.
trap 'tput cnorm;exit' INT
#定义数组变量,该数组有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 '
)
#获取计算机时间,并分别提取个位和十位数字.
now_time(){
hour=$(date +%H)
min=$(date +%M)
sec=$(date +%S)
hour_left=`echo $hour/10 | bc`
hour_right=`echo $hour%10 | bc`
min_left=`echo $min/10 | bc`
min_right=`echo $min%10 | bc`
sec_left=`echo $sec/10 | bc`
sec_right=`echo $sec%10 | bc`
}
#定义函数:打印数组中的某一个数字.
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[32m${number[i]:$begin:12}\033[0m"
done
}
#打印时间分隔符,echo通过\u可以支持unicode符号.
#unicode编码中2588是一个方块.
print_punct(){
tput cup $1 $2
echo -en "\e[32m\u2588\e[0m"
}
#依次打印小时,分钟,秒(个位和十位分别打印).
while :
do
tput civis #隐藏光标.
now_time
print_time $hour_left 2 #需要打印的数字以及X轴坐标(第几列).
print_time $hour_right 14
print_punct 8 28 #定义(Y,X)坐标位8,28,打印时间分隔符号.
print_punct 10 28
print_time $min_left 30
print_time $min_right 42
print_punct 8 56
print_punct 10 56
print_time $sec_left 58
print_time $sec_right 70
echo
sleep 1
done