programing

여러 조건이 있는 Bash if 문이 오류를 발생시킵니다.

telecom 2023. 4. 25. 21:52
반응형

여러 조건이 있는 Bash if 문이 오류를 발생시킵니다.

두 개의 오류 플래그를 검사하는 스크립트를 작성하려고 하는데, 한 개의 플래그(또는 둘 다)가 변경되면 오류가 발생합니다.내 스크립트는 다음과 같습니다.

my_error_flag=0
my_error_flag_o=0
do something.....
if [[ "$my_error_flag"=="1" || "$my_error_flag_o"=="2" ] || [ "$my_error_flag"="1" &&     "$my_error_flag_o"="2" ]]; then
    echo "$my_error_flag"
else
    echo "no flag"
fi

기본적으로 다음과 같이 해야 합니다.

if ((a=1 or b=2) or (a=1 and b=2))
  then
     display error
else
     no error
fi

표시되는 오류는 다음과 같습니다.

 line 26: conditional binary operator expected
 line 26: syntax error near `]'
 line 26: `if [[ "$my_error_flag"=="1" || "$my_error_flag_o"=="2" ] || [ "$my_error_flag"="1" && "$my_error_flag_o"="2" ]]; then'

제 브래킷이 망가졌나요?

사용하다-a(및의 경우) 및-o(또는) 작업입니다.

tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html

갱신하다

사실 당신은 여전히 사용할 수 있습니다.&&그리고.||와 함께요-eq작동.따라서 스크립트는 다음과 같습니다.

my_error_flag=1
my_error_flag_o=1
if [ $my_error_flag -eq 1 ] ||  [ $my_error_flag_o -eq 2 ] || ([ $my_error_flag -eq 1 ] && [ $my_error_flag_o -eq 2 ]); then
      echo "$my_error_flag"
else
    echo "no flag"
fi

이 경우 마지막 두 표현식을 삭제하고 한 표현식을 그대로 사용하거나 다음과 같은 연산을 수행할 수 있습니다.

my_error_flag=1
my_error_flag_o=1
if [ $my_error_flag -eq 1 ] ||  [ $my_error_flag_o -eq 2 ]; then
      echo "$my_error_flag"
else
    echo "no flag"
fi

둘 중 하나를 사용할 수 있습니다.[[아니면요?((키워드를 입력합니다.사용할 때요[[키워드, 다음과 같은 문자열 연산자를 사용해야 합니다.-eq,-lt.생각합니다,((다음과 같은 연산자를 직접 사용할 수 있으므로 산술에 가장 적합합니다.==,<그리고.>.

사용.[[교환입니다.

a=$1
b=$2
if [[ a -eq 1 || b -eq 2 ]] || [[ a -eq 3 && b -eq 4 ]]
then
     echo "Error"
else
     echo "No Error"
fi

사용.((교환입니다.

a=$1
b=$2
if (( a == 1 || b == 2 )) || (( a == 3 && b == 4 ))
then
     echo "Error"
else
     echo "No Error"
fi

사용하지 마십시오.-a아니면요?-o휴대할 수 없기 때문에 조작합니다.

팔로잉을 시도해 보세요.

if ([ $dateR -ge 234 ] && [ $dateR -lt 238 ]) || ([ $dateR -ge 834 ] && [ $dateR -lt 838 ]) || ([ $dateR -ge 1434 ] && [ $dateR -lt 1438 ]) || ([ $dateR -ge 2034 ] && [ $dateR -lt 2038 ]) ;
then
    echo "WORKING"
else
    echo "Out of range!"

책을 읽으면 영감을 얻을 수 있습니다.entrypoint.sh 지정된 변수가 설정되었는지 확인하는 MySQL의 기여자가 작성한 스크립트입니다.

스크립트에 나와 있는 것처럼 파이프로 연결할 수 있습니다.-a예를 들어 다음과 같습니다.

if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" -a -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then
    ...
fi

언급URL : https://stackoverflow.com/questions/16203088/bash-if-statement-with-multiple-conditions-throws-an-error 입니다.

반응형