2015-04-19 52 views
0

我不能從第10個參數中刪除,看起來像這樣:(01:53)小時和分鐘。 我的代碼如下所示:如何以分鐘輸出最長登錄時間(不是hh:mm)?

#!/bin/bash 

if [ ! $# -eq 1 ] #we need only one username 
then echo usage: $0 Error! 
    exit 1 
fi 

if [ $(finger $1 2>&1 >/dev/null | grep -c "no such user") -gt 0 ] 
then echo #this is a nonexistent username 
     echo No such username 
else #existent username 
     us=$1; 
     last $1 | awk 'BEGIN {time=$10 } 
         ($10 > x) && ($10 != "in") { 
           time = $10 
         } 
         END{ 
         print "Longest login time:" time }' 
fi 

輸出:

(01:53) 

我需要:

113 

回答

1
time="01:53" 
IFS=: read hours minutes <<<"$time" 
time_in_mins=$((60 * 10#$hours + 10#$minutes)) 
echo "$time_in_mins" 

我明確地使用基地10爲變量,這樣0809不被解釋爲無效的八進制數字


grep -qif條件很好的選擇:不是

if [ $(finger $1 2>&1 >/dev/null | grep -c "no such user") -gt 0 ] 

使用本

if finger $1 2>&1 >/dev/null | grep -q "no such user" 

以你在做什麼,仔細一看,我在awk命令中執行計算:請注意,從last輸出的時間可能包括天。

last "$1" | awk -F '[()]' ' 
     function to_minutes(time, d, a, n) { 
      n = split(time, a, /\+/) 
      if (n == 2) { 
       d = a[1] 
       time = a[2] 
      } 
      n = split(time, a, /:/) 
      return (1440*d + 60*a[1] + a[2]) 
     } 
     { 
      time = to_minutes($2 ? $2 : 0) 
      max = time > max ? time : max 
     } 
     END {print max} 
    ' 
+0

謝謝:)。 @格蘭傑克曼 –

相關問題