0

私は StackOverflow を含むインターウェブを見回しましたが、私が求めているのと同じ質問に対する答えは 1 つしか見つかりませんでした (宿題が大好きです)。ただし、質問者はコード例を提供していないため、彼の質問への回答は役に立ちませんでした。

そうは言っても、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\)

以下のいくつかの質問に答えるには: ユーザーが接続されている時間 (who または who am i を使用) と日付 (現在の時刻) を特定しようとしています。シナリオは、これが 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 (1 時間の秒数) で割ります。

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

これがおそらくあなたの割り当ての理由です-日付/時刻の計算。

于 2013-03-29T02:48:20.617 に答える