![Error./c.sh: 24행: [: 쉘 프로그램에 매개변수가 너무 많습니다.](https://linux55.com/image/70047/Error.%2Fc.sh%3A%2024%ED%96%89%3A%20%5B%3A%20%EC%89%98%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%97%90%20%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EA%B0%80%20%EB%84%88%EB%AC%B4%20%EB%A7%8E%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
사용자가 시스템에 로그인하는 시간을 인쇄하는 쉘 스크립트를 만들려고 하는데 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