简单的脚本向服务器发送数据

简单的脚本向服务器发送数据

我想问一下我的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

调用命令时不要使用 echo。

您可以不使用单引号。如果您选择这样做,则需要转义命令调用中的引号:

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

或者,如果您想使用单引号,则必须进行字符串连接,这意味着在变量之前结束单引号,然后继续它们(如“nobody”建议的那样:

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

相关内容