조건부 문자열과 숫자를 평가하는 데 정말 어려움을 겪고 있습니다. 몇 시간 동안 읽고 시도한 후(나의 초보자 가이드syntax error in conditional expression
) 등과 같은 오류 메시지가 계속 나타납니다 .unary operator expected
conditional 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
다음 코드 조각은 // 를 사용하여 elif
PID 비교 논리를 올바르게 구현합니다 . 이는 else
가능한 세 가지 출력 중 하나만 생성되도록 보장합니다. echo
POSIX 비교 구문을 사용합니다(참조: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