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 $x
4를 인쇄합니다.x=2; (x=4); echo $x
prints 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"
다음의 점에 주의해 주세요.
||
★★★★★★★★★★★★★★★★★」&&
이 논리 오퍼랜드and)인 경우 (또는/and)가 됩니다.||
★★★★★★★★★★★★★★★★★」&&
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
'your programing' 카테고리의 다른 글
Excel 셀에 사진 삽입 (0) | 2023.04.22 |
---|---|
스크립트가 서비스 연결에 액세스하는 방법(Azure Devops 파이프라인) (0) | 2023.04.22 |
Windows에서 PATH 환경변수가 과도하게 입력되지 않도록 하려면 어떻게 해야 합니까? (0) | 2023.04.22 |
Objective-C 암묵적 변환으로 정수 정밀도 'NSUIInterger'(일명 '서명되지 않은 긴')에서 'int' 경고로 손실됨 (0) | 2023.04.22 |
Azure : BizSpark 가입 시 앱 서비스 및 앱 서비스 플랜 위치 변경 방법 (0) | 2023.04.22 |