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 object that i want to insert.
Here is my Script,
while true;
do
echo $i
number=$RANDOM;
let "number %= 9";
let "number = number + 1";
range=10;
for i in {1..18}; do
r=$RANDOM;
let "r %= $range";
number="$number""$r";
done;
curl -XPUT 'http://localhost:9200/nondomain_order/orders/'+$number+'' -d '{
"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": "2015-01-01T15:23:42",
"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"
}
]
I need to get the current DateTime and assign to the CreateDate. How can i do that?
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
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 number
variable against expansion with double quotes for safety if it ever changes)
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"'",
...
}'