Raspbian: 조건부 문자열 및/또는 숫자 평가

Raspbian: 조건부 문자열 및/또는 숫자 평가

조건부 문자열과 숫자를 평가하는 데 정말 어려움을 겪고 있습니다. 몇 시간 동안 읽고 시도한 후(나의 초보자 가이드syntax error in conditional expression) 등과 같은 오류 메시지가 계속 나타납니다 .unary operator expectedconditional binary operator expected

if 조건에 문제가 있지만 이해가 되지 않습니다. 산술 연산자를 -ge사용해 보았지만 -le그것도 작동하지 않았습니다. 이 코드 조각의 논란의 여지가 있는 논리에 대해 걱정하지 마십시오.

내 Raspberry에서 Raspbian(Debian)을 사용합니다.

#!/bin/sh
NAME=syslogd
PID=/var/run/$NAME.pid
PIDofP=`pidof $NAME`

    if [[ $PIDofP = "" ]]   #empty, at least not visible 
    then
        echo "   No process is running."
    fi

    if [[ $PIDofP < 1000 ]]
    then
        echo "   The PID-number is lower than 1000. ($PID: $PIDofP)"
    fi

    if [[ "$PIDofP" > 999 ]]
    then
        echo "   The PID-number is higher than 1000. ($PID: $PIDofP)"
    fi  
exit 0

문자열, 숫자, 정수 또는 기타 항목을 평가하여 해당 유형을 알 수 있는 방법이 있습니까? 내가 단지 많은 숫자 및/또는 문자를 가지고 있고 그 "형식"을 알고 싶다고 가정해 보겠습니다. 그러면 나중에 사용할 수 있고 올바른 구문을 찾는 데 몇 시간을 소비할 필요가 없습니다.

죄송합니다. bash.script를 처음 작성합니다.

답변1

조건에 따옴표를 사용하지 않으면 오류가 발생할 수 unary operator expected있습니다 . $PIDofP이 경우 빈 문자열인 경우 쉘은 빈 값 대신 $PIDofP왼쪽에 아무 값도 표시하지 않으므로 오류 메시지가 표시됩니다.=

if다음 코드 조각은 // 를 사용하여 elifPID 비교 논리를 올바르게 구현합니다 . 이는 else가능한 세 가지 출력 중 하나만 생성되도록 보장합니다. echoPOSIX 비교 구문을 사용합니다(참조:bash에서 이중 대괄호와 단일 대괄호의 차이점은 무엇입니까?).

#!/bin/sh
NAME=syslogd
PID=/var/run/$NAME.pid
PIDofP=`pidof $NAME`
if [ "$PIDofP" = "" ]; then
    echo "   No process is running."
elif [ "$PIDofP" -lt 1000 ]; then
    echo "   The PID number is lower than 1000. ($PID: $PIDofP)"
else
    # $PIDofP is >= 1000.
    echo "   The PID number is 1000 or higher. ($PID: $PIDofP)"
fi
exit 0

관련 정보