서버에 데이터를 보내는 간단한 스크립트

서버에 데이터를 보내는 간단한 스크립트

내 bash 스크립트가 올바른지 묻고 싶습니다. 1초마다 sensors총 10번 명령의 출력을 보내고 싶습니다 .

#!/bin/bash
for i in {1..10}
do
a=$(date '+%s')
D=$(sensors)

curl -i -k -X POST -H "Content-Type: application/json" --data '{ "id":2,"timestamp":echo "${a}","data":echo "${D}"}' https://dv7knsjzph.execute-api.eu-central-1.amazonaws.com/prod/boxtronic-devices/2/data/
sleep 1
done

감사해요

답변1

명령을 호출할 때 에코를 사용하지 마세요.

작은 따옴표 없이도 할 수 있습니다. 이렇게 하려면 명령 호출에서 따옴표를 이스케이프해야 합니다.

curl -i -k -X POST -H "Content-Type: application/json" --data "{ \"id\":2,\"timestamp\": \"${a}\",\"data\": \"${D}\"}" https:......

또는 작은 따옴표를 사용하려면 문자열 연결을 수행해야 합니다. 즉, 변수 앞의 작은 따옴표를 끝내고 계속합니다("아무도"가 제안한 대로:

curl -i -k -X POST -H "Content-Type: application/json" --data '{ "id":2,"timestamp": "'"${a}"'","data": "'"${D}"'"}' https:......

echo를 꼭 사용해야 한다면 호출에서 echo의 출력을 사용해야 합니다.

curl -i -k -X POST -H "Content-Type: application/json" --data "{ \"id\":2,\"timestamp\": \"$(echo ${a})\",\"data\": \"$(echo ${D})\"}" https:......

답변2

첫째, 루프 구문이 잘못되었습니다. for i in 1 .. 10세 번 실행됩니다. 한 번 1, 한 번 .., 한 번 10. 1에서 10 사이의 숫자를 얻으려면 다음을 수행해야 합니다 . 다음으로 변수를 확장할 수 있도록 외부에서 큰따옴표를 사용할 수 있도록 for i in {1..10}명령 내부에 작은따옴표를 사용합니다 . curl이 같은:

#!/bin/bash
for i in {1..10}
do
    a=$(date '+%s')
    D=$(sensors)

    curl -i -k -X POST -H "Content-Type: application/json" \
        --data "{ 'id':2,'timestamp':$a,'data':$D}" https:......
    sleep 1
done

또는 태그 이름과 인용할 값이 필요한 경우 다음을 사용하세요.

#!/bin/bash
for i in {1..10}
do
    a=$(date '+%s')
    D=$(sensors)

    curl -i -k -X POST -H "Content-Type: application/json" \
        --data "{ 'id':'2','timestamp':'$a','data':'$D'}" https:......
    sleep 1
done

관련 정보