0

我环顾了包括 StackOverflow 在内的互联网,只找到了我所问的同一个问题的一个答案(一定要喜欢家庭作业)。但是,提问者没有提供任何代码示例,所以回答他的问题对我没有帮助。

话虽如此,我有一个脚本要求我使用 date 和 who 命令来确定用户连接到其终端的时间长度(以小时和分钟为单位)。

这就是我所拥有的——它在数学上不能正常工作。

loginHour=$(echo $(who am i) | cut -d' ' -f5 | cut -d: -f1)
loginMin=$(echo $(who am i)  | cut -d' ' -f5 | cut -d: -f2)

currentHour=$(echo $(date) | cut -d' ' -f4 | cut -d: -f1)
currentMinute=$(echo $(date) | cut -d' ' -f4 | cut -d: -f2)

echo -n $(expr $currentHour - $loginHour) hour\(s\);echo $(expr $currentMinute - $loginMin) minute\(s\)

要回答以下一些问题:我正在尝试确定用户已连接多长时间(使用谁或使用我是谁)和日期(当前时间)。场景是这不会超过 24 小时。因此,假设我在下午 5:00 (17:00) 登录并在晚上 7:30 (19:30) 注销 - 我需要编写一个脚本来计算我登录的时间。

4

1 回答 1

1

您需要的部分内容是 GNU date 命令

a="19:30"
$ date -d "$a"  +%s
1364520600

该数字是纪元秒(自 1970 年 1 月 1 日以来经过的秒数)。在 UNIX 和 Linux 中,日期算术通常使用纪元秒完成

所以现在是 19:30;登录时间为 17:00。

a="19:30"
b="17:00"
elapsed= $(( `date -d $a +%s` - `date -d $b +%s`))

因此,经过的时间是 9000 秒。如何将 9000 秒转换为小时?除以 3600(一小时的秒数)。

hr=$(( $elapsed / 3600 ))
min=$(( ($elapsed % 3600) /60  ))

这可能是您分配的原因 - 日期/时间算术。

于 2013-03-29T02:48:20.617 回答