所以不久前我一直在尝试 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