修复正常运行时间的输出

修复正常运行时间的输出

所以不久前我一直在尝试 Bash,我想操纵“uptime”命令的输出。我设法将 up x 分钟的输出更改为 0:05,例如,如果 up 时间为 5 分钟,但其余内容消失。

我应该使用什么方法来显示时间、用户数量及其平均负载,而不影响我当前的正常运行时间输出。

这是所需的输出:21:08:13 up 0:10, 3 users, load average: 0.30, 0.30, 0.25

任何帮助,将不胜感激!

#!/bin/bash

since="`uptime --since`"
start="`date --date "$since" '+%s'`"
now="`date '+%s'`"
sec=$((now-start))

days=$((sec/(60*60*24)))
sec=$((sec-days*(60*60*24)))

hr=$((sec/(60*60)))
sec=$((sec-hr*(60*60)))

min=$((sec/60))
sec=$((sec-min*60))

rest="$(uptime | perl -npe'{s/(.*,\s+)(\d+\s+user)/$2/}')"

printf "%d(days), %02d:%02d:%02d(hms), %s\n" $days $hr $min $sec "$rest"

电流输出

0(days), 00:34:00(hms), 3 users, load average: 0.09, 0.14, 0.14

答案1

其中一种方法是使用 Perl。这只是添加了一行并printf更改了该行:

rest="$(uptime | perl -npe'{s/(.*,\s+)(\d+\s+user)/$2/}')"

printf "%d(days), %02d:%02d:%02d(hms), %s\n" $days $hr $min $sec "$rest"

结果:

 00:55:21 up 10 days,  2:38,  1 user,  load average: 0.05, 0.06, 0.07

请注意,仍然缺少一个字段,请比较:

$ ./uptime.bash
10(days), 02:45:06(hms), 1 user,  load average: 0.02, 0.03, 0.04
$ uptime
 01:02:10 up 10 days,  2:45,  1 user,  load average: 0.02, 0.03, 0.04

相关内容