Как установить логическое значение в команде 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\"
Другие вопросы по тегам