簡體   English   中英

使用逗號分隔的bash變量運行for循環

[英]Run a for loop using a comma separated bash variable

我有一個集合列表作為Bash的逗號分隔變量,如下所示

list_collection=$collection_1,$collection_2,$collection_2,$collection_4

我想連接到Mongodb並在已完成的這些集合上運行一些命令,如下所示,但我無法使循環正常工作

${Mongo_Home}/mongo ${mongo_host}/${mongo_db} -u ${mongo_user} -p ${mongo_password} <<EOF 
use ${mongo_db};for i in ${list_collection//,/ } 
do 
  db.${i}.reIndex();
  db.${i}.createIndex({
  "recon_type":1.0,
  "account_name":1.0,
  "currency":1.0,
  "funds":1.0,
  "recon_status":1.0,
  "transaction_date":1.0},
  {name:"index_def"});
  if [ $? -ne 0 ] ; then 
    echo "Mongo Query to reindex ${i} failed" 
    exit 200 
  fi 
done
EOF

我在做什么錯?

正確的方法是什么?

很難從一堆沒有表現出這種行為的代碼中猜測出您想要的行為是什么,但是要list_collection ,下面的代碼將對list_collection每個項目運行一次mongo ,每次都使用一個不同的heredoc:

#!/usr/bin/env bash

# read your string into a single array
IFS=, read -r -a listItems <<<"$list_collection"

# iterate over items in that array
for i in "${listItems[@]}"; do
  { # this brace group lets the redirection apply to the whole complex command
    "${Mongo_Home}/mongo" "${mongo_host}/${mongo_db}" \
                          -u "${mongo_user}" -p "${mongo_password}" ||
      { echo "Mongo query to reindex $i failed" >&2; exit 200; } 
  } <<EOF
  use ${mongo_db}; 
  db.${i}.reIndex();
  db.${i}.createIndex({
    "recon_type":1.0,
    "account_name":1.0,
    "currency":1.0,
    "funds":1.0,
    "recon_status":1.0,
    "transaction_date":1.0
  }, {name:"index_def"});
EOF
done

或者,僅運行一次mongo (但是無法確定發生故障的索引)可能類似於:

#!/usr/bin/env bash

# read your string into a single array
IFS=, read -r -a listItems <<<"$list_collection"

buildMongoCommand() {
  printf '%s\n' "use $mongo_db;"
  for i in "${listItems[@]}"; do
    cat <<EOF
      db.${i}.reIndex();
      db.${i}.createIndex({
        "recon_type":1.0,
        "account_name":1.0,
        "currency":1.0,
        "funds":1.0,
        "recon_status":1.0,
        "transaction_date":1.0
      }, {name:"index_def"});
EOF
  done
}

"${Mongo_Home}/mongo" "${mongo_host}/${mongo_db}" \
    -u "${mongo_user}" -p "${mongo_password}" \
  < <(buildMongoCommand) \
  || { echo "Mongo query failed" >&2; exit 200; } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM