about_If
간단한 설명
하나 이상의 조건부 테스트 결과에 따라 문 목록을 실행하는 데 사용할 수 있는 언어 명령에 대해 설명합니다.
자세한 설명
지정된 조건부 테스트가 if
true로 평가되는 경우 문을 사용하여 코드 블록을 실행할 수 있습니다. 또한 이전의 모든 테스트가 false로 평가되는 경우 실행할 하나 이상의 추가 조건부 테스트를 지정할 수 있습니다. 마지막으로, 다른 이전 조건부 테스트가 true로 평가되지 않는 경우 실행되는 추가 코드 블록을 지정할 수 있습니다.
구문
다음 예제에서는 문 구문을 보여줍니다 if
.
if (<test1>)
{<statement list 1>}
[elseif (<test2>)
{<statement list 2>}]
[else
{<statement list 3>}]
문을 실행 if
하면 PowerShell은 조건식을 true 또는 false로 평가합니다 <test1>
. true <statement list 1>
이면 <test1>
실행되고 PowerShell은 if
문을 종료합니다. false이면 <test1>
PowerShell은 조건문에 <test2>
지정된 조건을 평가합니다.
부울 평가에 대한 자세한 내용은 about_Booleans 참조하세요.
true <statement list 2>
이면 <test2>
실행되고 PowerShell은 if
문을 종료합니다. 둘 다 <test1>
false로 <test2>
평가되면 코드 블록이 <statement list 3
> 실행되고 PowerShell이 if
문을 종료합니다.
여러 elseif
문을 사용하여 일련의 조건부 테스트를 연결할 수 있습니다. 각 테스트는 이전의 모든 테스트가 false인 경우에만 실행됩니다. 많은 elseif
문이 포함된 문을 만들어야 if
하는 경우 대신 Switch 문을 사용하는 것이 좋습니다.
예:
가장 if
간단한 문은 단일 명령을 포함하며 문이나 else
문을 포함하지 elseif
않습니다. 다음 예제에서는 문의 가장 간단한 형식을 if
보여줍니다.
if ($a -gt 2) {
Write-Host "The value $a is greater than 2."
}
이 예제에서 변수가 $a
보다 2
크면 조건이 true로 평가되고 문 목록이 실행됩니다. 그러나 기존 변수보다 작거나 같 2
거나 다른 경우 $a
문은 if
메시지를 표시하지 않습니다.
Else 문을 추가하면 $a 2보다 작거나 같을 때 메시지가 표시됩니다. 다음 예제와 같이:
if ($a -gt 2) {
Write-Host "The value $a is greater than 2."
}
else {
Write-Host ("The value $a is less than or equal to 2," +
" is not created or is not initialized.")
}
이 예제를 더 구체화하기 위해 값을 $a
같을 때 문을 사용하여 elseif
메시지를 표시할 2
수 있습니다. 다음 예제와 같이:
if ($a -gt 2) {
Write-Host "The value $a is greater than 2."
}
elseif ($a -eq 2) {
Write-Host "The value $a is equal to 2."
}
else {
Write-Host ("The value $a is less than 2 or" +
" was not created or initialized.")
}
3항 연산자 구문 사용
PowerShell 7.0에서는 3항 연산자를 사용하는 새 구문을 도입했습니다. C# 3항 연산자 구문을 따릅니다.
<condition> ? <if-true> : <if-false>
3항 연산자는 간소화된 if-else
문처럼 동작합니다. 식이 <condition>
계산되고 결과가 부울로 변환되어 다음에 평가해야 하는 분기를 결정합니다.
<condition>
식이 true인 경우<if-true>
식이 실행됩니다.<condition>
식이 false인 경우<if-false>
식이 실행됩니다.
예시:
$message = (Test-Path $path) ? "Path exists" : "Path not found"
이 예제에서 값은 반환$true
되는 $message
경우 Test-Path
입니다Path exists
. Test-Path
반환$false
되는 경우 값 $message
은 .입니다Path not found
.
$service = Get-Service BITS
$service.Status -eq 'Running' ? (Stop-Service $service) : (Start-Service $service)
이 예제에서는 서비스가 실행 중이면 중지되고 상태가 실행되고 있지 않으면 시작됩니다.
또는 <if-true>
<if-false>
식이 <condition>
명령을 호출하는 경우 괄호로 래핑해야 합니다. 그렇지 않은 경우 PowerShell은 식에서 명령에 대한 인수 예외를 <condition>
발생시키고 및 <if-false>
식에 대한 <if-true>
예외를 구문 분석합니다.
예를 들어 PowerShell은 이러한 ternaries에 대한 예외를 발생합니다.
Test-Path .vscode ? Write-Host 'exists' : Write-Host 'not found'
(Test-Path .vscode) ? Write-Host 'exists' : Write-Host 'not found'
(Test-Path .vscode) ? (Write-Host 'exists') : Write-Host 'not found'
Test-Path: A positional parameter cannot be found that accepts argument '?'.
ParserError:
Line |
1 | (Test-Path .vscode) ? Write-Host 'exists' : Write-Host 'not found'
| ~
| You must provide a value expression following the '?' operator.
ParserError:
Line |
1 | (Test-Path .vscode) ? (Write-Host 'exists') : Write-Host 'not found'
| ~
| You must provide a value expression following the ':' operator.
그리고 이 예제에서는 다음을 구문 분석합니다.
(Test-Path .vscode) ? (Write-Host 'exists') : (Write-Host 'not found')
exists
참고 항목
PowerShell