Error./c.sh: 行 24: [: シェル・プログラムにパラメーターが多すぎます。

Error./c.sh: 行 24: [: シェル・プログラムにパラメーターが多すぎます。

ユーザーがシステムにログインする時間を印刷するシェルスクリプトを作成しようとしましたが、too many arguments errorオンラインでさまざまな方法を試しましたが、何も機能しません。誰でもエラーを見つけることができますか?

#!/bin/bash 

lt=`who | grep "jeevansai" | cut -c 35-39`
lh=`echo $lt | cut -c 1-2`
lm=`echo $lt | cut -c 4-5`
ld=`who | grep "jeevansai" | cut -c 32-34`

ch=`date +%H`
cm=`date +%M`
cd=`date +%d`

fun()
{
  if [ $cm -gt $lm ]
  then
  {
    sm=`expr $cm - $lm`
    sh=`expr $ch - $lh`
  }
  else
  {
    sm=`expr 60 - $lm - $cm`
    sh=`expr $ch - $lh - 1`
  }
  fi
  exit 1
}
if [ $ld -gt $cd ]
then
{
  if [ $ch -gt $lh ]
  then
  {
    fun
  }
  else
  {
    sh=`expr 24 - $lh + $ch`
    sm=`expr 60 - $lm + $cm`
  }
  fi
}
else
  fun
fi
echo "$sh hr $sm min" 

出力bash -x c.sh

++ who
++ grep jeevansai
++ cut -c 35-39
+ lt='22:27
23:18'
++ echo 22:27 23:18
++ cut -c 1-2
+ lh=22
++ echo 22:27 23:18
++ cut -c 4-5
+ lm=27
++ who
++ grep jeevansai
++ cut -c 32-34
+ ld='31 
31 '
++ date +%H
+ ch=23
++ date +%M
+ cm=24
++ date +%d
+ cd=31
+ '[' 31 31 -gt 31 ']'
c.sh: line 24: [: too many arguments
+ fun
+ '[' 24 -gt 27 ']'
++ expr 60 - 27 - 24
+ sm=9
++ expr 23 - 22 - 1
+ sh=0
+ exit 1

ベストアンサー1

who | grep jeevansai出力が1行になるという仮定は間違っています。

++ who
++ grep jeevansai
++ cut -c 32-34
+ ld='31 
31 '

このコマンドを教えてくれます。

ld=`who | grep "jeevansai" | cut -c 32-34`

予想される単一の数字の代わりに変数をld" "に設定してください。31 31後で計算してみてください...

if [ $ld -gt $cd ]

...拡張...

if [ 31 31 -gt 31 ]

これはあまりにも多くの議論です[

あなたがしなければならないことは取ることです最低限度ですべての日付は後ろから始まりますwho。残念ながら、日付算術はシェルでは簡単ではありません(あなたのプログラムは現在の月フィールドを完全に無視します)。個人的に私はPerlやPythonを選びます。

編集する:もし疑問に思う人のためになぜ whoシングルユーザー向けに複数行の出力を印刷する:最新のUnixワークステーション(OSXを含む)あなたが開くすべてのシェルウィンドウ各シェルウィンドウには1つの項目が割り当てられているため、通常は独自の項目を取得します。擬似端末、しかもutmp使用されるデータベースは、who各アクティブ端末(医師端末またはその他)を独自のログインとして計算します。同様にscreentmuxおよび各ウィンドウに疑似端末を割り当てます。完全なグラフィックセッションのutmpエントリがあるかもしれません。これらすべては1970年代に設計され、それ以来あまり変わりませんでした。たとえば、2つのシェルウィンドウを開くと、私のMacでは次のようになります。

$ who
zwol     console  Aug 18 09:59 
zwol     ttys000  Aug 19 09:49 
zwol     ttys001  Aug 19 10:35 

おすすめ記事