Home > Blockchain >  Read lines looping over array which contains filenames in bash
Read lines looping over array which contains filenames in bash

Time:01-18

In bash, I would like to loop over a previously defined array, which contains filenames. In turn, each file of the array must be readed and processed dynamically (while read line...).

This is an example of what the files of the array contains:

_VALUE1_,_VALUE1_,1,Name 1
_VALUE2_,_VALUE2_,1,Name 2
_VALUE3_,_VALUE3_,1,Name 3
_VALUE4_,_VALUE4_,1,Name 4
_VALUE5_,_VALUE5_,1,Name 5

This is what I've tested with no luck.

#!/bin/bash

. functions.sh

GEN_ARQ_ARRAY=("./cfg_file.txt" "./euro_file.txt" "./zl_file.txt")
WB_ARQ_ARRAY=("./rn_cfg_wb_file.txt" "./rn_eur_wb_file.txt" "./rn_zl_wb_file.txt")
BN_ARQ_ARRAY=("./rn_cfg_bn_file.txt" "./rn_eur_bn_file.txt" "./rn_zl_bn_file.txt")
AM_ARQ_ARRAY=("./rn_cfg_am_file.txt" "./rn_eur_am_file.txt" "./rn_zl_am_file.txt")

STATUS_BOOL=true

for i in "${!GEN_ARQ_ARRAY[@]}"; do

    while IFS=$'\r' read -r line || [[ -n "$line" ]];do
        STACK_NAME=${line%%,*} # Gets the first substring of a string divided by ','

        STACK_STATUS=$(curl -su "${USERNAME}":"${PASSWORD}" -X GET http://"${SERVER_NAME}":9100/api/stacks/"${STACK_NAME}"/state | ./jq-linux64 -cr '.result.value')

        if [[ $(echo "$STACK_STATUS" | tr -d '\r') == "$STATUS_BOOL" ]]; then
            echo "${line}" >> "${GEN_ARQ_ARRAY[i]}"
            case ${line} in
                *"ARQBS"*|*"ARCBS"*|*"ARQWB"*|*"ARCWB"*) echo "${line}" >> "${WB_ARQ_ARRAY[$i]}";;
                *"ARQOF"*|*"ARCOF"*|*"ARQBN"*|*"ARCBN"*) echo "${line}" >> "${BN_ARQ_ARRAY[$i]}";;
                *"ARQAM"*|*"ARCAM"*) echo "${line}" >> "${AM_ARQ_ARRAY[$i]}";;
                *) echo "$(logWarn) No matches -- ${STACK_NAME}" | tee -a "$LOGFILE";;
            esac
        else
            echo "$(logInfo) ${STACK_NAME} is not running" | tee -a "$LOGFILE"
        fi
    done < "${GEN_ARQ_ARRAY[i]}"
done

Problem here is that the for loop starts, detects array content, gets the first value of the array, enter into while, and it constantly loops in the first position of the array even with the end of the file is reached. I can't find the way to exit the while loop and continue with the next array position.

I'm pretty sure there is a better way to implement this.

Hearing your ideas!

Edit:

Solved by replacing the line echo "${line}" >> "${GEN_ARQ_ARRAY[i]}", which was in-loop filling up the file.

CodePudding user response:

Solved by replacing the line echo "${line}" >> "${GEN_ARQ_ARRAY[i]}", which was in-loop filling up the file. Once I did, the code worked flawlessly.

  •  Tags:  
  • Related