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출력이 한 줄이 될 것이라는 가정은 잘못되었습니다.

++ 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 포함)당신이 여는 모든 쉘 창각 쉘 창에 하나의 항목이 할당되므로 일반적으로 자체 항목을 얻습니다.의사 터미널,게다가utmp사용된 데이터베이스는 who각 활성 터미널(의사 터미널 또는 기타)을 자체 로그인으로 계산합니다. 마찬가지로 screen및는 tmux각 창에 의사 터미널을 할당합니다. 전체 그래픽 세션에 대한 utmp 항목이 있을 수도 있습니다. 이 모든 것들은 1970년대에 디자인되었으며 그 이후로 별로 변하지 않았습니다. 예를 들어, 두 개의 셸 창을 열면 내 Mac에서 다음과 같이 보입니다.

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

관련 정보