나는 여러 대의 전화기를 가지고 있으며 전화기의 가동 시간을 얻으려고 노력하고 있습니다. 모든 전화기에 대해 REST API를 활성화했으며 가동 시간 값을 얻기 위해 CURL 스크립트를 실행하고 싶습니다. Polycom 전화의 가치를 가져오는 스크립트가 있습니다. 다음 명령은 작동하지만 3000개 이상의 장치에서 이 작업을 수행하고 싶습니다. 100개의 명령이 포함된 스크립트를 실행하면 출력이 나오지만 모두 뒤죽박죽되어 있습니다. 3000개 장치 모두에 대해 동일한 사용자 이름과 비밀번호를 가진 모든 전화기의 IP 주소가 포함된 txt 및 Excel 파일이 있습니다. 모든 명령을 실행한 다음 IPADDRESS가 포함된 텍스트 파일을 가져오고 요청 결과(IPADDRESS:"Status": "2000"" 또는 이와 유사한 것)를 반환하는 방법을 찾고 있습니다. 주로 간단한 방법을 원합니다. 각 IP 주소의 각 컬 라인에 대한 결과를 봅니다.
주문하다
curl -d "{\"data\": [\"UpTimeSinceLastReboot\"]}" -H "Content-Type: application/json" -k https://USERNAME:PASSWORD@IPADDRESS/api/v1/mgmt/config/get
산출
{“Status”: “2000”, “data”: {"UpTimeSinceLastReboot": "<DAYS_HOURS_MINUTES_SECONDS>"}
>> /tmp/filename.txt를 추가하여 모든 응답이 포함된 txt 파일을 출력할 수 있었지만 이를 전화기의 IP 주소와 정확하게 일치시킬 수 없었습니다.
답변1
모든 예에서 파일에는 한 줄에 하나의 IP가 있다고 가정합니다.
1. 컬과 매직
다음을 통해 목표를 달성할 수 있습니다.curl(1)
그리고 주변의 마법
curl -d "{\"data\": [\"UpTimeSinceLastReboot\"]}" \
-H "Content-Type: application/json" \
-k \
-u USERNAME:PASSWORD \
-w ",%{remote_ip}\t" \
<(sed 's#^#https://#;s#$#/api/v1/mgmt/config/get#' /path/to/file) \
| tr -ds '\n\t' '\t\n'
더 나은 이해를 위해 명령을 여러 줄로 나눴습니다.
- 자격 증명을 URL에서 컬 매개변수로 옮겼습니다.
- 키는 하위 쉘에서 입력되며 IP 앞에 프로토콜이 붙습니다.https://그리고 경로를 추가하세요/api/v1/mgmt/config/get
- -w 옵션 쓰기원격 IP응답 후. 나중에 tr에서 해당 형식을 사용하여
,REMOTE_IP<TAB>
원하는 형식을 만듭니다. - 파이프를 통해 통과시키세요.
tr(1)
응답 끝에서 가능한 줄바꿈을 제거하고 끝에 줄바꿈을 만듭니다(훌륭하지는 않지만 작동해야 합니다).
참고: 이 예의 결과는 다음과 같습니다.
RESPONSE,IP
…
2. for 루프
for ip in $(cat /path/to/file)
do
echo -ne "$ip\t"
curl -d "{\"data\": [\"UpTimeSinceLastReboot\"]}" -H "Content-Type: application/json" -k https://USERNAME:PASSWORD@$ip/api/v1/mgmt/config/get
done
결과:
IP,RESPONSE
…
3. while 루프
while 루프
while read ip
do
echo -ne "$ip\t"
curl -d "{\"data\": [\"UpTimeSinceLastReboot\"]}" -H "Content-Type: application/json" -k https://USERNAME:PASSWORD@$ip/api/v1/mgmt/config/get
done < /path/to/file
결과:
IP,RESPONSE
…