it-swarm.com.ru

Как установить логическое значение в команде 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?

2
Valentyn Hruzytskyi

Использование переменной для всей строки JSON и ее поэтапное построение могут сделать цитирование менее громоздким и сделать командную строку curl более удобочитаемой и проще в обслуживании, даже несмотря на то, что общий код гораздо более многословен.

Построение строки выполняется здесь с использованием оператора самоконкатенации строк +=. Обратите внимание, что, например, в json_string+=$name не нужно заключать в кавычки, так как не выполняется разбиение Word, а справа нет специальных символов.

Вы можете использовать ассоциативный массив для поиска нужного значения на основе предоставленного ключа. Здесь я назначаю пары индивидуально. Ниже я покажу, как это сделать в одном задании.

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"
)'
2
Dennis Williamson

Самый простой способ сопоставить строку 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
4
PerlDuck

В вашем случае вы используете 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\"
3
mature