変数にtrue/false値を設定し、curl
コマンドでjsonに送信する必要があります。
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
変数に適切なブール値を設定する方法は?
JSON文字列全体に変数を使用して部分的に構築することで、全体のコードがより冗長になっても、引用を扱いにくくし、curl
コマンドラインを読みやすく、保守しやすくすることができます。
文字列の構築は、文字列の自己連結演算子+=
を使用してここで行われます。たとえば、json_string+=$name
では、Word分割が実行されず、右側に特殊文字が存在しないため、引用符は不要です。
連想配列を使用して、提供されたキーに基づいて必要な値を検索できます。ここでは、ペアを個別に割り当てています。以下に、1つの割り当てでそれらを行う方法を示します。
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をさらに分割して、コード内でもう少し構造的に見えるようにすることができます(結果の文字列の内容はまだ1行の文字列です)。理想的には、これよりも複雑なJSONを使用している場合、専用のJSONツールを使用して構造を構築する必要があります。
連想配列の宣言と割り当てを一度に行う方法は次のとおりです。最初の例は1行で、2行目は複数行です。これも読みやすさと保守性を向上させるためです。
declare -A sexes='([female]="true" [male]="false")'
declare -A sexes='(
[female]="true"
[male]="false"
)'
文字列male
をtrue
またはfalse
(ニーズに応じて)とfemale
のいずれかに他の値にマッピングする最も簡単な方法は、単純なif…then…else
句です。 。秘Theはクォートですが、$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
次に、... {"name":"'"$name"'", "sex":\"$sex\"} ...
または... {"name":"'"$name"'", "sex":$sex} ...
を指定してcurlコマンドを実行します
テストスクリプト:
#!/bin/bash
sx="male"
sex="false"
if [ "$sx" = "male" ]; then
sex="true"
fi
echo \"$sex\"