文件预览

list.sh

查看 Cloudflare API 技能包中的文件内容。

文件内容

scripts/zones/list.sh

#!/bin/bash
# List Cloudflare zones (domains)

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/../_lib.sh"

OUTPUT="table"

while [[ $# -gt 0 ]]; do
    case $1 in
        --json) OUTPUT="json"; shift ;;
        --quiet) OUTPUT="quiet"; shift ;;
        -h|--help)
            echo "Usage: zones/list.sh [options]"
            echo ""
            echo "Options:"
            echo "  --json   Raw JSON output"
            echo "  --quiet  Zone IDs only"
            exit 0
            ;;
        *) echo "Unknown option: $1"; exit 1 ;;
    esac
done

TOKEN=$(get_token)
if [ -z "$TOKEN" ]; then
    echo "❌ No API token. Run ./scripts/setup.sh first." >&2
    exit 1
fi

RESPONSE=$(cf_get "/zones?per_page=50")
check_error "$RESPONSE" || exit 1

case $OUTPUT in
    json)
        echo "$RESPONSE" | jq '.result'
        ;;
    quiet)
        echo "$RESPONSE" | jq -r '.result[].id'
        ;;
    table)
        echo ""
        printf "%-36s | %-30s | %-10s | %s\n" "ZONE ID" "DOMAIN" "STATUS" "PLAN"
        printf "%s\n" "--------------------------------------|--------------------------------|------------|--------"
        
        echo "$RESPONSE" | jq -r '.result[] | [.id, .name, .status, .plan.name] | @tsv' | \
        while IFS=$'\t' read -r id name status plan; do
            printf "%-36s | %-30s | %-10s | %s\n" "$id" "$name" "$status" "$plan"
        done
        
        TOTAL=$(echo "$RESPONSE" | jq -r '.result_info.total_count // 0')
        echo ""
        echo "Total: $TOTAL zone(s)"
        ;;
esac