[bash] 여러 조건이있는 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


답변