How to pass current date to a curl query using shell script?

后端 未结 3 1302
清歌不尽
清歌不尽 2021-02-14 13:21

I am inserting data to a elastic search using CURL, it works fine when i insert with a fixed data. I am trying to Get Current DateTime and assign to a variable and use with the

相关标签:
3条回答
  • 2021-02-14 13:56

    Rather than playing with quotes inside quotes I would suggest using here-doc to get rid of all magic quoting. Use your curl like this:

    number=10
    dt="$(date --iso-8601=seconds)"
    
    curl -XPUT 'http://localhost:9200/nondomain_order/orders/'$number -d@- <<EOF
    {
      "CustType": null,
      "tag": "OrderType:Postpaid",
      "GUDeviceID": "0",
      "IsAvailable": false,
      "GUOrderID": "123",
      "OrderID": "3",
      "OrderDate": "2015-01-06T15:23:42.7198285+05:30",
      "GUAccountID": "15010615234251403",
      "CreateUser": "admin",
      "CreateDate": "$dt",
      "CancelledDate": "1899-01-01T00:00:00",
      "CancelledUser": null,
      "GUTranID": "15010615234271604",
      "TenentID": 39,
      "CompanyID": 42,
      "ViewObjectID": 0,
      "ObjectID": null,
      "Status": 2,
      "OrderDetails": [
        {
          "GUPromtionID": "15010519341113508",
          "GUOrderID": "15010615234271703",
          "ChangeID": 0,
          "GUPackageID": "14100112243589402",
          "startdate": "2015-01-06T00:00:00"
        }
      ]
    }
    EOF
    
    0 讨论(0)
  • 2021-02-14 14:17

    You can do it like this:

    DATE_ISO=$(date +"%Y-%m-%dT%H:%M:%S")
    ...
    curl -XPUT 'http://localhost:9200/nondomain_order/orders/'+$number+'' -d '{
    ...
       "CreateDate": "'"$DATE_ISO"'",
    ...
    }'
    
    0 讨论(0)
  • 2021-02-14 14:21

    Inside your string, change

    "CreateDate": "2015-01-01T15:23:42",
    

    to

    "CreateDate": "'"$(date +%Y-%m-%dT%H:%M:%S)"'",
    

    There, I terminated the ' string and started a " string with the $(date) inside it. Otherwise, it would not get executed, but just passed to curl as a string.

    You can also assign it to a variable beforehand and use it later like this:

    now=$(date +%Y-%m-%dT%H:%M:%S)
    
    ...
    
    "CreateDate": "'"$now"'",
    

    Other problems

    Change

    curl -XPUT 'http://localhost:9200/nondomain_order/orders/'+$number+'' -d '{
    

    into

    curl -XPUT 'http://localhost:9200/nondomain_order/orders/'"$number" -d '{
    

    Bash concatenation is just two strings one after another without a space between them. Otherwise, it would query URLS like http://localhost:9200/nondomain_order/orders/+0123456789+ instead of http://localhost:9200/nondomain_order/orders/0123456789

    (Here, I protected the numbervariable against expansion with double quotes for safety if it ever changes)

    0 讨论(0)
提交回复
热议问题