두 개의 오류 플래그를 확인하는 스크립트를 작성하려고하는데 하나의 플래그 (또는 둘 다)가 변경되면 오류가 발생합니다. 내 스크립트 :
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