diff --git a/bin/envs.net/envs_user_info.sh b/bin/envs.net/envs_user_info.sh index 21cbb18..de8a0fe 100755 --- a/bin/envs.net/envs_user_info.sh +++ b/bin/envs.net/envs_user_info.sh @@ -19,6 +19,50 @@ TMP_JSON='/tmp/users_info.json_tmp' clear_lastline() { sed -i '$ s/,$//' "$TMP_JSON" ; } +progress_userarray() { + for field in "${!line_to_set[@]}"; do + field_name="${field//,*/}" + field_count="${field//*,/}" + + if [[ ":${field_is_array[*]}:" =~ $field_name ]] && ! [[ ":${field_finished[*]}:" =~ $field_name ]]; then + # begin of user def. array + if [ -z "$field_in_progress" ]; then + field_in_progress="$field_name" + cat << EOM >> "$TMP_JSON" + "$field_name": [ + "${line_to_set[$field]}", +EOM + else + if [ "$field_in_progress" != "$field_name" ] && ! [[ ":${field_queue[*]}:" =~ $field_name ]]; then + field_queue+=( "$field_name" ) + else + if [ "$field_in_progress" = "$field_name" ]; then + # continue user def. array + cat << EOM >> "$TMP_JSON" + "${line_to_set[$field]}", +EOM + if [ "$field_count" = "${hc_field_entry[$field_name]}" ]; then + # end of user def. array + # remove trailing ',' on last user entry + clear_lastline + cat << EOM >> "$TMP_JSON" + ], +EOM + unset field_in_progress + field_finished+=( "$field_name" ) + fi + else + if ! [[ ":${field_queue[*]}:" =~ $field_name ]]; then + field_queue+=( "$field_name" ) + fi + fi + fi + fi + fi + done +} + + cat << EOM > "$TMP_JSON" { "timestamp": "$(date +'%s')", @@ -119,21 +163,23 @@ EOM count_entry='0' # use to limit entrys count_field_entry='0' # use to separat array line by line - unset field_exists ; declare -a field_exists=() # contains field names to limit entrys - unset field_is_array ; declare -a field_is_array=() # contains array fields to printf correct json entrys - unset line_to_set ; declare -A line_to_set # contains user info lines - unset hc_field_entry ; declare -A hc_field_entry # contains highest_count_field_entry + unset field_exists ; declare -a field_exists=() # contains field names to limit entrys + unset field_is_array ; declare -a field_is_array=() # contains array fields to printf correct json entrys + unset line_to_set ; declare -A line_to_set # contains user info lines + unset hc_field_entry ; declare -A hc_field_entry # contains highest_count_field_entry # check 'INFO_FILE' and add entrys to 'line_to_set' array while read -r LINE ; do - if [[ -n "$LINE" ]] && ! [[ "$LINE" = '#'* ]] \ + if [ -n "$LINE" ] && ! [[ "$LINE" = '#'* ]] \ && ! [[ "$LINE" = 'desc='* ]] && ! [[ "$LINE" = 'ssh_pubkey='* ]]; then user_field="${LINE//=*/}" user_value="${LINE//*=/}" if ! [[ ":${field_exists[*]}:" =~ $user_field ]]; then # entry will be a single line - count_entry="$(( "$count_entry" + 1 ))"; [ "$count_entry" -le '10' ] || continue + count_entry="$(( "$count_entry" + 1 ))" ; count_field_entry="$(( "$count_field_entry" +1 ))" + #[ "$count_entry" -le '10' ] || continue + field_exists+=( "$user_field" ) line_to_set["$user_field","$count_field_entry"]+="$user_value" else @@ -141,8 +187,10 @@ EOM if ! [[ ":${field_is_array[*]}:" =~ $user_field ]]; then field_is_array+=( "$user_field" ) fi - count_field_entry="$(( "$count_field_entry" +1 ))" ; [ "$count_field_entry" -le '32' ] || continue - hc_field_entry["$user_field"]="$count_field_entry" + count_field_entry="$(( "$count_field_entry" +1 ))" + #[ "$count_field_entry" -le '32' ] || continue + + hc_field_entry[$user_field]="$count_field_entry" line_to_set["$user_field","$count_field_entry"]+="$user_value" fi fi @@ -160,43 +208,20 @@ EOM EOM fi done + # # array line entrys field_in_progress='' + unset field_queue ; declare -a field_queue=() + unset field_finished ; declare -a field_finished=() - for field in "${!line_to_set[@]}"; do - field_name="${field//,*/}" - field_count="${field//*,/}" + progress_userarray - if [[ ":${field_is_array[*]}:" =~ $field_name ]]; then - # begin of user def. array - if ! [ "$field_in_progress" = "$field_name" ]; then - field_in_progress="$field_name" - - cat << EOM >> "$TMP_JSON" - "$field_name": [ - "${line_to_set[$field]}", -EOM - else - # continue user def. array - cat << EOM >> "$TMP_JSON" - "${line_to_set[$field]}", -EOM - - echo "$field_count - ${hc_field_entry[$field_name]}" - - if [ "$field_count" = "${hc_field_entry[$field_name]}" ] || [ "$field_count" = '0' ]; then - # end of user def. array - # remove trailing ',' on last user entry - unset field_in_progress - clear_lastline - cat << EOM >> "$TMP_JSON" - ], -EOM - fi - fi - fi - done + if [[ -n "$field_queue" ]]; then + for x in "${!field_queue[@]}"; do + progress_userarray + done + fi # ssh # only print ssh-pubkey if user has enabled