your programing

Bash의 단순 논리 연산자

lovepro 2023. 4. 22. 22:34
반응형

Bash의 단순 논리 연산자

변수가 몇 개 있는데 다음 조건(단어로 쓴 후 bash 스크립팅에 실패함)을 체크하고 싶습니다.

if varA EQUALS 1 AND ( varB EQUALS "t1" OR varB EQUALS "t2" ) then 

do something

done.

그리고 실패한 시도에서, 나는 다음과 같은 것을 생각해냈다.

if (($varA == 1)) && ( (($varB == "t1")) || (($varC == "t2")) ); 
  then
    scale=0.05
  fi

당신이 쓴 것은 실제로 거의 효과가 있지만(모든 변수가 숫자일 경우 효과가 있습니다), 전혀 관용적인 방법은 아닙니다.

  • (…)괄호는 서브셸을 나타냅니다.그 안에 있는 것은 다른 많은 언어에서와 같은 표현이 아닙니다.명령어 목록입니다(외부 괄호처럼).이러한 명령어는 별도의 서브프로세스로 실행되므로 괄호 내에서 실행되는 리다이렉션, 할당 등은 괄호 밖에서 수행되지 않습니다.
    • 선도적인 달러 표시와 함께,$(…)명령어 치환입니다.괄호 안에 명령어가 있고 명령어 출력은 명령줄의 일부로 사용됩니다(큰따옴표 사이에 치환이 없는 한 추가 확장 후입니다만, 이것은 다른 이야기입니다).
  • { … }괄호는 명령어를 그룹화한다는 점에서 괄호와 비슷하지만 그룹화가 아닌 해석에만 영향을 줍니다.프로그램x=2; { x=4; }; echo $x4를 인쇄합니다.x=2; (x=4); echo $xprints 2. (중괄호는 닫기 전에 공백과 세미콜론이 필요합니다만, 괄호는 닫지 않습니다.그건 구문의 기호에 불과해요.)
    • 선도적인 달러 표시와 함께,${VAR}파라미터 확장으로 변수 값까지 확장되며 추가 변환이 있을 수 있습니다.
  • ((…))이중 괄호는 다른 프로그래밍 언어와 유사한 구문을 가진 산술 명령, 즉 정수에 대한 계산입니다.이 구문은 주로 할당 및 조건부에서 사용됩니다.
    • 산술식에서도 같은 구문이 사용됩니다.$((…))이 값은 식의 정수값까지 확장됩니다.
  • [[ … ]]이중 괄호는 조건식을 둘러쌉니다.조건식은 대부분 다음과 같은 연산자를 기반으로 구축됩니다.-n $variable변수가 비어 있는지 여부를 테스트합니다.-e $file파일 존재 여부를 테스트합니다.문자열 등호 연산자도 있습니다."$string1" == "$string2"(오른쪽이 패턴이라고 가정합니다.[[ $foo == a* ]]테스트:$foo로부터 시작하다a하는 동안에[[ $foo == "a*" ]]테스트:$foo바로 그렇다a*및 익숙한 것!,&& ★★★★★★★★★★★★★★★★★」||부정, 접속 및 분리를 나타내는 연산자 및 그룹화를 위한 괄호.연산자 " " " " " " " " " " " " ."[[ "$x" == "$y" ]], not ) 및 공백 또는 다음과 같은 문자;브래킷 내부 및 외부(예:[[ -n $foo ]], 가 아닙니다.
  • [ … ]단일 괄호는 더 많은 기호가 있는 조건식의 대체 형식입니다(단, 더 오래되고 더 휴대할 수 있습니다).지금은 아무것도 쓰지 말고 스크립트가 포함된 스크립트를 발견하면 걱정하기 시작합니다.

bash로 시험을 작성하는 관용적인 방법은 다음과 같습니다.

if [[ $varA == 1 && ($varB == "t1" || $varC == "t2") ]]; then

이 필요한 의 주위에 인용문 및각, 해 주세요).===★★★★★★★★★★★★★★★★★★:

if [ "$varA" = 1 ] && { [ "$varB" = "t1" ] || [ "$varC" = "t2" ]; }; then

초박빙의

if [[ $varA -eq 1 ]] && [[ $varB == 't1' || $varC == 't2' ]]; 
  then 
    scale=0.05
  fi

작동해야 합니다.

분해하다

[[ $varA -eq 1 ]] 

에서의 정수 비교입니다.

$varB == 't1'

는 문자열 비교입니다.그렇지 않으면, 저는 단지 비교를 올바르게 그룹화하는 것입니다.

이중 대괄호로 조건식을 구분합니다.그리고 이 주제에 대한 좋은 읽을거리입니다. "(IBM) Demystify test, [, [[, (, and if-then-else)"

매우 휴대성이 뛰어난 버전(레거시 Bourne 쉘까지):

if [ "$varA" = 1 -a \( "$varB" = "t1" -o "$varB" = "t2" \) ]
then    do-something
fi

).[맛에

=-eq★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★♪

  • 3 -eq 03
  • 3 = 03문자열 비교

if-then-else 문의 단축판 코드는 다음과 같습니다.

( [ $a -eq 1 ] || [ $b -eq 2 ] ) && echo "ok" || echo "nok"

다음의 점에 주의해 주세요.

  1. || ★★★★★★★★★★★★★★★★★」&&이 논리 오퍼랜드and)인 경우 (또는/and)가 됩니다.

  2. || ★★★★★★★★★★★★★★★★★」&& if condition that / that / display if oper oper 。

실질적으로 그 진술은 다음과 같다.

(a=1 또는 b=2)이면 "ok"이고 그렇지 않으면 "ok"입니다.

if ([ $NUM1 == 1 ] || [ $NUM2 == 1 ]) && [ -z "$STR" ]
then
    echo STR is empty but should have a value.
fi

언급URL : https://stackoverflow.com/questions/6270440/simple-logical-operators-in-bash

반응형