最终目标是设置一个包含动态统计信息的网站。 为此,我已经创建了一个mysql数据库,并计算我们的Minecraft服务器上已知玩家的总数。 下一步是完全显示所有玩家的游戏时间。
我有一个“activetime.conf”,其中列出了所有玩家的游戏时间。
activetime.conf:
config {
auto-save=300
default-range=5
max-range=10
}
players {
"111-111-1111-11-11" {
name=playerjack
time="2h13m25s"
}
222-2-22222-2-222 {
name=playergert
time="14m13s"
}
}
我已经拥有的内容:
players=$(ls -l /path | grep -v ^d | grep -v ^t | wc -l)
mysql -u root -pmypass mydatabase -e "UPDATE mytable SET players = '$players';"
hours_played=$(grep -E '"*h*m*s"' /path/activetime.conf)
echo $hours_played
我们有以下字符串“hours_played”,并希望搜索时间信息+总结时间,以便最终显示整个小时。
hours_played:
time="2h13m25s" time="14m13s"
最终结果应为:
2
为什么结果为2?
2h13m25s + 14m13s = 2h27m38s (=2h)
答案 0 :(得分:2)
您可以做的一件事是使用函数来解析时间信息(小时,分钟,秒):
#!/bin/bash
active_time() {
regex='time.*\"(.+)h(.+)m(.+)s\"'
while read -r str; do
if [[ $str =~ $regex ]] ; then
h=$(( h + BASH_REMATCH[1] ))
m=$(( m + BASH_REMATCH[2] ))
s=$(( s + BASH_REMATCH[3] ))
fi
sub=$(( m / 60 ))
tot=$(( h + sub ))
done<"/path/active_time.conf"
echo "${tot} total hours"
}
因此,您只需拨打:{/ p>,而不是回显最后一行echo $hours_played
active_time
调用该函数会累计小时和分钟,例如:
time="8h13m25s"
time="6h54m13s"
输出:
15 total hours
*如果需要,可以省略总和秒数并添加总数作为OP添加的练习。