내 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