Bash, PowerShell 및 Cmd의 Azure CLI 구문 차이점 알아보기

Azure CLI 명령은 Bash, PowerShell 및 Cmd(Windows 명령 셸) 스크립팅 언어 모두에서 실행할 수 있습니다. 그러나 하위 타일 스크립팅에는 차이가 있습니다. 이 자습서 단계에서는 첫 번째 Azure Storage 계정을 만들고 세 가지 스크립팅 언어 모두에 대한 매개 변수 값의 서식을 지정하는 방법을 알아봅니다.

필수 조건

  • 환경을 준비하기 위한 필수 구성 요소를 완료했습니다.
  • 리소스 그룹 수준에서 사용 권한이 있는 리소스 그룹에 contributor 액세스할 수 있습니다.

줄 연속 문자에 주의

대부분의 Azure CLI 설명서는 Azure Cloud Shell을 사용하여 Bash에서 작성 및 테스트됩니다. Azure CLI 구문을 복사할 때 가장 먼저 기억해야 할 것 중 하나는 선택한 스크립팅 언어의 줄 연속 문자가 서로 교환할 수 없으므로 확인하는 것입니다.

스크립팅 언어 줄 연속 문자
Bash 백슬래시(\)
PowerShell 백틱(`)
Cmd 당근(^)

Azure CLI 코드 블록의 오른쪽 위 모서리에 있는 복사 단추는 백슬래시(\)와 백틱(`)을 의도적으로 제거합니다. 서식이 지정된 코드 블록을 복사하려면 키보드 또는 마우스를 사용하여 예제를 선택하고 복사합니다.

변수를 사용할 때 구문 차이점 이해

변수를 사용하는 구문은 스크립팅 언어마다 약간 다릅니다. 비교는 다음과 같습니다.

사용 사례 Bash PowerShell Cmd
변수 만들기 variableName=varValue $variableName="varValue" set variableName=varValue
변수를 매개 변수 값으로 사용 variableName $variableName %variableName%
매개 변수에 --query 변수 사용 '$variableName' '$variableName' '$variableName'

콘솔 화면에 변수 정보를 반환하는 방법에는 여러 가지가 있지만 echo 대부분의 경우 작동합니다. 비교는 다음과 같습니다.

  • Bash: 에코 $varResourceGroup
  • PowerShell: 에코 $varResourceGroup
  • Cmd: echo %varResourceGroup%

3 단계에서는 스크립트에서 사용할 변수를 채웁니다. 변수 구문의 자세한 예제를 살펴봅니다.

스크립팅 언어 간의 차이점 인용에 대해 알아보기

모든 Azure CLI 매개 변수는 문자열입니다. 그러나 각 스크립팅 언어에는 작은따옴표와 큰따옴표, 공백 및 매개 변수 값을 처리하는 고유한 규칙이 있습니다.

문자열 값 Azure CLI PowerShell Cmd
Text ‘text’ 또는 “text” ‘text’ 또는 “text” "text"
숫자 \'50\' ''50'' '50'
Boolean \'true\' ''false'' 'true'
날짜 '2021-11-15' '2021-11-15' '2021-11-15'
JSON '{"key":"value"}' 또는 "{"key":"value"}" '{"key": "value"}' 또는 "{'"key'": '"value'"}" 또는 "{""key"": ""value""}" "{"key":"value"}"

많은 Azure CLI 매개 변수는 공백으로 구분된 값 목록을 허용합니다. 이는 따옴표에 영향을 줍니다.

  • 따옴표가 지정되지 않은 공백으로 구분된 목록: --parameterName firstValue secondValue
  • 따옴표로 묶인 공백으로 구분된 목록: --parameterName "firstValue" "secondValue"
  • 공백을 포함하는 값: --parameterName "value1a value1b" "value2a value2b" "value3"

스크립팅 언어로 문자열을 평가하는 방법을 잘 모르는 경우 문자열 값을 콘솔로 반환하거나 Azure CLI 참조 디버그 명령에 설명된 대로 사용합니다--debug.

배운 내용을 적용할 스토리지 계정 만들기

이 자습서 단계의 나머지 부분에서는 Azure CLI 명령의 따옴표 규칙을 보여 줍니다. Azure CLI에 대한 환경 준비에서 만든 리소스 그룹을 사용합니다. <msdocs-tutorial-rg-00000000> 리소스 그룹의 이름으로 대체합니다.

이 자습서에서 사용할 Azure Storage 계정을 만듭니다. 이 예제에서는 스토리지 계정 이름에 임의의 ID를 할당하지만 다른 이름을 사용하려면 스토리지 계정 이름 규칙에 대한 Storage 계정 개요를 참조하세요.

Important

스토리지 계정을 만들려면 먼저 리소스 공급자를 Microsoft.Storage 구독에 등록해야 합니다. 리소스 종류 등록에 대한 자세한 내용은 리소스 공급자 등록을 참조하세요.

다음 스크립트 예제에서는 다음에 대한 언어별 구문을 스크립팅하는 방법을 보여 줍니다.

  • 줄 연속
  • 가변 사용량
  • 임의 식별자
  • echo 명령
# Variable block
let "randomIdentifier=$RANDOM*$RANDOM"
location="eastus"
resourceGroup="<msdocs-tutorial-rg-00000000>"
storageAccount="msdocssa$randomIdentifier"

# Create a storage account.
echo "Creating storage account $storageAccount in resource group $resourceGroup"
az storage account create --name $storageAccount \
                          --resource-group $resourceGroup \
                          --location $location \
                          --sku Standard_RAGRS \
                          --kind StorageV2 \
                          --output json

참고 항목

"구독을 찾을 수 없음" 오류가 발생했나요? 이 오류는 활성 구독에 등록되지 않은 경우에 Microsoft.Storage 발생합니다. 리소스 공급자를 등록하려면 Azure 리소스 공급자 및 유형을 참조 하세요.

Azure CLI는 새 스토리지 계정을 만들 때 100줄이 넘는 JSON을 출력으로 반환합니다. 다음 JSON 사전 출력에는 간결성을 위해 생략된 필드가 있습니다.

{
"accessTier": "Hot",
"allowBlobPublicAccess": false,
"creationTime": "yyyy-mm-ddT19:14:26.962501+00:00",
"enableHttpsTrafficOnly": true,
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ msdocs-tutorial-rg-00000000/providers/Microsoft.Storage/storageAccounts/msdocssa00000000",
"keyCreationTime": {
  "key1": "yyyy-mm-ddT19:14:27.103127+00:00",
  "key2": "yyyy-mm-ddT19:14:27.103127+00:00"
},
"kind": "StorageV2",
"location": "eastus",
"name": "msdocssa00000000",
"primaryEndpoints": {
  "blob": "https://msdocssa00000000.blob.core.windows.net/"
},
"primaryLocation": "eastus",
"provisioningState": "Succeeded",
"resourceGroup": "msdocs-tutorial-rg-00000000",
"sku": {
  "name": "Standard_RAGRS",
  "tier": "Standard"
},
"statusOfPrimary": "available",
"statusOfSecondary": "available",
"tags": {},
"type": "Microsoft.Storage/storageAccounts"
}

따옴표 차이를 연습하는 태그 만들기

az storage account update를 사용하여 스토리지 계정을 식별하고 따옴표 차이에 대해 알아보는 데 도움이 되는 태그를 추가합니다. 이러한 스크립트 예제에서는 다음에 대한 언어별 구문을 스크립팅하는 방법을 보여 줍니다.

  • 공백을 포함하는 값
  • 빈 공백 따옴표
  • 특수 문자 이스케이프
  • 변수 사용

매개 변수는 --tags 공백으로 구분된 키:값 쌍 목록을 허용합니다. 리소스 그룹의 <msdocssa00000000> 이름과 Azure Storage 계정의 이름으로 대체 <msdocs-tutorial-rg-00000000> 합니다.

# Create new tags. This syntax works with or without quotes around each key-value pair.
az storage account update --name <msdocssa00000000> \
                          --resource-group <msdocs-tutorial-rg-00000000> \
                          --tags Team=t1 Environment=e1

# Create new tags containing spaces. You must use quotes.
az storage account update --name <msdocssa00000000> \
                          --resource-group <msdocs-tutorial-rg-00000000> \
                          --tags "Floor number=f1" "Cost center=cc1"

# Create a new tag with an empty value.
az storage account update --name <msdocssa00000000> \
                          --resource-group <msdocs-tutorial-rg-00000000> \
                          --tags "Department="''""

# Create a new tag containing special characters resulting in "Path": "$G:\\myPath".
az storage account update --name <msdocssa00000000> \
                          --resource-group <msdocs-tutorial-rg-00000000> \
                          --tags "Path=\$G:\myPath"

# Create a tag from a variable.
newTag="tag1=tag value with spaces"
az storage account update --name <msdocssa00000000> \
                          --resource-group <msdocs-tutorial-rg-00000000> \
                          --tags "$newTag"

이 자습서 단계를 진행하는 동안 이전 태그를 덮어쓰지 않으려면 매개 변수merge를 로 설정하는 --operation az tag update 명령을 사용합니다.

# Get the resource ID of your storage account.
saID=$(az resource show --resource-group <msdocs-tutorial-rg-00000000> \
                        --name <msdocssa00000000> \
                        --resource-type Microsoft.Storage/storageAccounts \
                        --query "id" \
                        --output tsv)

echo My storage account ID is $saID

# Append new tags.
az tag update --resource-id $saID \
              --operation merge \
              --tags <tagName>=<tagValue>

# Get a list of all tags.
az tag list --resource-id $saID

더 많은 스크립팅 언어별 스크립트 비교

이러한 스크립트 차이점을 자세히 살펴보세요. 다음 예제에서는 다음과 같은 따옴표로 묶는 차이점을 보여 줍니다.

  • JSON 문자열을 매개 변수 값으로 전달
  • 매개 변수를 사용하여 --query 결과 필터링
    • 숫자
    • 부울 값
    • 날짜

JSON 문자열을 포함하는 매개 변수의 예입니다. 이 스크립트는 이 자습서에서 작동하지 az rest 않으므로 향후 참조를 위해 제공됩니다.

az rest --method patch \
        --url https://management.azure.com/subscriptions/<mySubscriptionID>/resourceGroups/<myResourceGroup>/providers/Microsoft.HybridCompute/machines/<machineName>?api-version=yyyy-mm-dd-preview \
        --resource https://management.azure.com/ \
        --headers Content-Type=application/json \
        --body '{"properties": {"agentUpgrade": {"enableAutomaticUpgrade": false}}}'

숫자 값 필터링의 예입니다. 현재 구독에 VM이 없는 한 이 예제는 향후 참조를 위해 제공됩니다.

az vm list --resource-group <myResourceGroup> \
           --query "[?storageProfile.osDisk.diskSizeGb >=\`50\`].{Name:name, admin:osProfile.adminUsername, DiskSize:storageProfile.osDisk.diskSizeGb}" \
           --output table

이 자습서에서 만든 스토리지 계정을 사용하여 부울 값을 필터링하는 예제입니다.

az storage account list --resource-group <msdocs-tutorial-rg-00000000> \
    --query "[?allowBlobPublicAccess == \`true\`].id"

이 자습서에서 만든 스토리지 계정을 사용하여 날짜를 필터링하는 예제입니다.

# include time
az storage account list --resource-group <msdocs-tutorial-rg-00000000> \
    --query "[?creationTime >='2021-11-15T19:14:27.103127+00:00'].{saName:name, saID: id, sku: sku.name}"

# exclude time
az storage account list --resource-group <msdocs-tutorial-rg-00000000> \
    --query "[?creationTime >='2021-11-15'].{saName:name, saID: id, sku: sku.name}"

# subtract days and use a variable
saDate=$(date +%F -d "-30days")
az storage account list --resource-group <msdocs-tutorial-rg-00000000> \
    --query "[?creationTime >='$saDate'].{saName:name, saID: id, sku: sku.name}"

Azure CLI 참조 명령 디버그

매개 변수 사용 --debug

Azure CLI는 모든 명령과 함께 사용할 수 있는 매개 변수를 제공합니다 --debug . 디버그 출력은 광범위하지만 다음을 포함한 정보를 제공합니다.

  • 스크립팅 언어로 해석되는 명령 인수(매개 변수 값)
  • 로그 파일의 위치
  • API 호출 세부 정보
  • 실행 오류

Azure CLI 명령을 사용할 때 실행 오류를 --debug 이해하고 수정하는 데 어려움이 있는 경우 Azure CLI가 실행되는 단계를 확인하는 것이 답입니다.

스토리지 계정을 만들 때 디버그 출력의 작은 부분은 다음과 같습니다.

 cli.knack.cli: Command arguments: ['storage', 'account', 'create', '--name', 'msdocssa00000000', '--resource-group', 'msdocs-rg-test', '--location', 'eastus', '--sku', 'Standard_RAGRS', '--kind', 'StorageV2', '--output', 'json', '--debug']
 ...
 cli.azure.cli.core.sdk.policies: Request URL: 'https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/checkNameAvailability?api-version=2023-01-01'
cli.azure.cli.core.sdk.policies: Request method: 'POST'
cli.azure.cli.core.sdk.policies: Request headers:
cli.azure.cli.core.sdk.policies:     'Content-Type': 'application/json'
cli.azure.cli.core.sdk.policies:     'Content-Length': '73'
cli.azure.cli.core.sdk.policies:     'Accept': 'application/json'
cli.azure.cli.core.sdk.policies:     'x-ms-client-request-id': '00000000-0000-0000-0000-000000000000'
cli.azure.cli.core.sdk.policies:     'CommandName': 'storage account create'
cli.azure.cli.core.sdk.policies:     'ParameterSetName': '--name --resource-group --location --sku --kind --output --debug'
cli.azure.cli.core.sdk.policies:     'User-Agent': 'AZURECLI/2.61.0 (DEB) azsdk-python-core/1.28.0 Python/3.11.8 (Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.35)'
cli.azure.cli.core.sdk.policies:     'Authorization': '*****'
cli.azure.cli.core.sdk.policies: Request body:
cli.azure.cli.core.sdk.policies: {"name": "msdocssa00000000", "type": "Microsoft.Storage/storageAccounts"}
urllib3.connectionpool: Starting new HTTPS connection (1): management.azure.com:443
urllib3.connectionpool: https://management.azure.com:443 "POST /subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/checkNameAvailability?api-version=2023-01-01 HTTP/1.1" 200 22
cli.azure.cli.core.sdk.policies: Response status: 200
...

자세한 문제 해결 팁은 Azure CLI 문제 해결을 참조하세요.

명령 사용 echo

Azure CLI가 해석하는 내용을 정확히 알려주지만 --debug 두 번째 옵션은 식 값을 콘솔에 반환하는 것입니다. 이 메서드는 스크립트에서 사용하기 위해 채우기 변수에 자세히 설명된 결과를 --query 확인할 때 유용합니다.

strExpression='{"key":"value"}'
echo $strExpression
{"key":"value"}

문제 해결

Azure CLI 참조 명령 구문이 제대로 작성되지 않은 일반적인 오류는 다음과 같습니다.

  • "잘못된 요청 ... {something}이(가) 잘못되었습니다."는 공백, 작은따옴표 또는 큰따옴표 또는 따옴표 부족으로 인해 발생할 수 있습니다.

  • "예기치 않은 토큰..." 은 추가 공간 또는 따옴표가 있을 때 표시됩니다.

  • "잘못된 jmespath_type 값" 오류는 매개 변수의 잘못된 따옴표로 인해 --query 발생하는 경우가 많습니다.

  • 연결 또는 누락된 이스케이프 문자로 인해 문자열의 형식이 제대로 지정되지 않은 경우 "변수 참조가 유효하지 않습니다."가 수신됩니다.

  • "인식할 수 없는 인수"는 종종 잘못된 줄 연속 문자로 인해 발생합니다.

  • 줄 연속 문자가 누락된 경우 "단항 연산자 뒤의 식 누락"이 표시됩니다.

추가 문제 해결 팁은 Azure CLI 명령 문제 해결을 참조 하세요.

자세한 정보 가져오기

이 자습서 단계에서 다루는 주제 중 하나에 대해 자세히 알아보시겠습니까? 자세한 내용은 이 표의 링크를 사용합니다.

주제 자세한 정보
스크립팅 차이점 스크립팅 언어 간의 차이점 인용
Bash 따옴표 규칙
PowerShell 따옴표 규칙
PowerShell 스크립팅 언어로 Azure CLI를 실행하기 위한 고려 사항
Windows 명령줄 팁
매개 변수 Azure CLI 매개 변수에서 따옴표 사용
JMESPath를 사용하여 쿼리 명령 출력에서 Bash, PowerShell 및 Cmd의 더 많은 구문 예제 찾기
문제 해결 Azure CLI 명령 문제 해결

다음 단계

이제 Bash, PowerShell 및 Cmd에 대한 Azure CLI 구문을 작성하는 방법을 배웠으므로 다음 단계를 진행하여 변수에 값을 추출하는 방법을 알아봅니다.