Как установить логическое значение в команде curl, используя скрипт bash
Мне нужно установить в переменную значение true/false и отправить его в JSON с curl
команда:
name=$1
sx=$2
`curl -d '{"name":"'"$name"'", "sex":true}' -H "Content-Type: application/json" -X POST http://localhost:8080/setacc`
переменная sx
принимает значение male
или же female
как установить соответствующее логическое значение в sex
переменная?
3 ответа
Использование переменной для всей строки JSON и ее поэтапное построение может сделать цитирование менее громоздким и сделать curl
Командная строка более читабельна и проще в обслуживании, хотя общий код гораздо более многословен.
Построение строки выполняется здесь с использованием оператора самоконкатенации строк. +=
, Обратите внимание, что в json_string+=$name
Например, нет необходимости заключать в кавычки, так как не выполняется разбиение по словам и нет специальных символов в правой части.
Вы можете использовать ассоциативный массив для поиска нужного значения на основе предоставленного ключа. Здесь я назначаю пары индивидуально. Ниже я покажу, как это сделать в одном задании.
name=$1
sx=$2
declare -A sexes
sexes[male]=false
sexes[female]=true
json_string='{"name":"'
json_string+=$name
json_string+='", "sex":'
json_string+=${sexes[$sx]}
json_string+='}'
curl -d "$json_string" " -H "Content-Type: application/json" -X POST http://localhost:8080/setacc
Вы можете разбить JSON еще больше, чтобы он выглядел немного более структурированным в коде (результирующее содержимое строки по-прежнему будет однострочным). В идеале, если вы используете более сложный JSON, чем этот, вы должны использовать специальный инструмент JSON для построения структуры.
Вот как вы можете одновременно сделать объявление и присваивание ассоциативного массива. Первый пример находится в одной строке, а второй - в нескольких строках - опять же для улучшения читабельности и удобства обслуживания.
declare -A sexes='([female]="true" [male]="false")'
declare -A sexes='(
[female]="true"
[male]="false"
)'
Самый простой способ сопоставить строку male
либо true
или же false
(в зависимости от ваших потребностей) и female
к некоторому другому значению является простым if…then…else
пункт. Хитрость заключается в цитировании, но вы уже получили это с $name
переменная. Так:
if [ "$sx" = "male" ]; then
sex="true"; # or whatever you consider male sex to be
else
sex="false"; # just the opposite, see above
fi
curl -d '{"name":"'"$name"'", "sex":'$sex'}' -H "Content-Type: application/json" -X POST http://localhost:8080/setacc
В вашем случае вы используете json и можете использовать текст "true" и текст "false".
Вам необходимо добавить в bash скрипт логику:
sex="false"
if [ "$sx" = "male" ]; then
sex="true"
fi
затем запустите команду curl с ... {"name":"'"$name"'", "sex":\"$sex\"} ...
или просто ... {"name":"'"$name"'", "sex":$sex} ...
Тестовый скрипт:
#!/bin/bash
sx="male"
sex="false"
if [ "$sx" = "male" ]; then
sex="true"
fi
echo \"$sex\"