다른 쉘로 다른 스크립트를 호출하는 스크립트 오류

다른 쉘로 다른 스크립트를 호출하는 스크립트 오류

sh 쉘에서 실행되는 스크립트가 있는데 이 스크립트는 정상적으로 실행됩니다. 하지만 ksh 쉘로 작성된 스크립트 하나를 추가했지만(스크립트 헤드에 #!/bin/ksh가 있음) 오류가 발생할 때마다

./monitor_FMn2.sh[19]: 104:  not found

오류가 발생한 두 번째 줄을 변경할 때마다 19번째 줄은 ksh 스크립트를 호출하는 줄입니다.

if `wc -l < $LOGFILE` > 55;
    then
    logcycle $LOGFILE
fi

로그사이클ksh 스크립트입니다.

답변1

`wc -l < $LOGFILE` > 55

이름이 Split+glob 대상의 출력(귀하의 경우 104)인 명령을 실행하고 해당 출력을 현재 디렉터리에서 wc호출되는 파일로 리디렉션합니다 . 55시스템에 104라는 명령이 없으므로 해당 오류가 발생합니다.

아마도 당신은 다음과 같이 쓰고 싶었을 것입니다.

if [ "$(($(wc -l < "$LOGFILE") +0))" -gt 55 ]; then...

즉, [aka test명령(대신 )을 실행하여 산술 표현식으로 해석된 104출력 (따라서 선행 공백이 있는 경우 불평하지 않음)이 55보다 큰지 테스트합니다.wc -l[

또는 ksh 구문을 사용하면:

if (($(wc -l < "$LOGFILE") +0 > 55)); then...

( 읽기 위해 열 수 없는 경우와 같이 명령이 출력을 생성하지 않는 +0경우를 위한 것입니다 ).wc -l < "$LOGFILE"$LOGFILE

55( 이전에 스크립트로 생성된 빈 파일을 제거할 수도 있습니다 ).

관련 정보