Bash 如何包装cURL,以便使用命令行编辑器处理Cloudant查询?

Bash 如何包装cURL,以便使用命令行编辑器处理Cloudant查询?,bash,cloudant,Bash,Cloudant,我希望创建一个shell脚本,它封装了的常见cURL操作 shell脚本应该允许我: 使用脚本中嵌入的json创建查询 通过提供设计文件名称、查询类型和查询名称删除查询 使用脚本中嵌入的json执行查询(查找) 列出数据库上的查询 脚本不应在每次使用时提示您输入cloudant用户名和密码 以下脚本允许我停留在vim编辑器中,迭代编辑JSON并执行它: #!/bin/bash set -e USERNAME=snowch DBNAME=stackoverflow FIND_JSON='{

我希望创建一个shell脚本,它封装了的常见cURL操作

shell脚本应该允许我:

  • 使用脚本中嵌入的json创建查询
  • 通过提供设计文件名称、查询类型和查询名称删除查询
  • 使用脚本中嵌入的json执行查询(查找)
  • 列出数据库上的查询

脚本不应在每次使用时提示您输入cloudant用户名和密码

以下脚本允许我停留在vim编辑器中,迭代编辑JSON并执行它:

#!/bin/bash

set -e

USERNAME=snowch
DBNAME=stackoverflow
FIND_JSON='{
    "selector": {
        "subject": {"$eq": "sample topic"}
    },
    "fields": ["_id", "_rev", "subject"],
    "sort": [{"subject": "asc"}],
    "limit": 10,
    "skip": 0
  }'

CREATE_JSON='
  {
      "index": {
          "fields": ["subject"]
      },
      "name" : "subject-index",
      "type" : "json"
  }'

JSON_PP='python -m json.tool' # By default use pythons json formatter
#JSON_PP="jq '.'"             # Uncomment this to use the jq json formatter

SCRIPT=$(basename $0)

if [[ ! $1 =~ (create)|(list)|(delete)|(find)  ]]; then
  echo "Usage: ./$SCRIPT create|list|delete|find"
  exit 1
fi

if [[ ! -e ~/.netrc ]]; then
  echo "Could not find your ~/.netrc file containing your Cloudant login credentials.  For example:"
  echo ""
  echo "machine <<username>>.cloudant.com login <<username>> password <<password>>"
  exit 1
fi

if [[ $1 == 'find' ]]; 
then
  curl -n -X POST https://$USERNAME.cloudant.com/$DBNAME/_find -d "$FIND_JSON"
fi

if [[ $1 == 'create' ]]; 
then
  curl -n -X POST https://$USERNAME.cloudant.com/$DBNAME/_index -d "$CREATE_JSON"
fi

if [[ $1 == 'list' ]]; 
then
  CMD="curl -n -s -X GET https://$USERNAME.cloudant.com/$DBNAME/_index | $JSON_PP"
  eval "$CMD"
fi

if [[ $1 == 'delete' ]]; 
then
  if [[ -z $2 ]]; then
    echo "Usage: ./$SCRIPT delete design_doc/type/name"
    exit 1
  fi
  curl -n -s -X DELETE https://$USERNAME.cloudant.com/$DBNAME/_index/$2
fi
#/bin/bash
set-e
用户名=snowch
DBNAME=stackoverflow
查找{
“选择器”:{
“主题”:{“$eq”:“示例主题”}
},
“字段”:[“\u id”、“\u rev”、“subject”],
“排序”:[{“主题”:“asc”}],
“限制”:10,
“跳过”:0
}'
创建
{
“索引”:{
“字段”:[“主题”]
},
“名称”:“主题索引”,
“类型”:“json”
}'
JSON_PP='python-m JSON.tool'#默认情况下使用pythons JSON格式化程序
#JSON_PP=“jq.”“#取消对其注释以使用jq JSON格式化程序
脚本=$(基本名称$0)
如果[!$1=~(create)|(list)|(delete)|(find)];然后
echo“用法:./$SCRIPT创建|列表|删除|查找”
出口1
fi
如果[!-e~/.netrc]];然后
echo“找不到包含Cloudant登录凭据的~/.netrc文件。例如:
回声“”
echo“machine.cloudant.com登录密码”
出口1
fi
如果[[$1=='find']];
然后
curl-n-X POST https://$USERNAME.cloudant.com/$DBNAME/\u find-d“$find\u JSON”
fi
如果[[$1=='创建']];
然后
curl-n-X POST https://$USERNAME.cloudant.com/$DBNAME/_index-d“$CREATE_JSON”
fi
如果[[$1=='列表']];
然后
CMD=“curl-n-s-X GET https://$USERNAME.cloudant.com/$DBNAME/_index |$JSON_PP”
eval“$CMD”
fi
如果[[$1=='删除']];
然后
如果[-z$2]];然后
echo“用法:./$SCRIPT删除设计\文档/类型/名称”
出口1
fi
curl-n-s-X删除https://$USERNAME.cloudant.com/$DBNAME/_index/$2
fi
如果我将脚本保存为
util.sh
我使用vim的工作流将类似于:

  • $vim util.sh
  • 编辑创建json
  • CTRL-Z至背景vim
  • 创建查询:
    $./util.sh create
  • 验证它:
    $./util.sh list
  • 执行它:
    $./util.sh find
  • 如果需要更改:
    • $./util.sh列表
    • 删除查询
      $./util.sh delete/json/subject index
    • 将vim带回前台
      fg
    • 编辑json
    • 从CTRL-Z到背景vim重复前面的步骤
注意,该脚本要求python漂亮地打印Cloudant返回的json。您可以将其更改为jq或您的首选工具