From 369e2421a96238b290545fefd76f72311ce32d3b Mon Sep 17 00:00:00 2001 From: creme Date: Mon, 24 Feb 2020 15:27:50 +0100 Subject: [PATCH 1/7] current dev --- bin/envs.net/envs_user_info.sh | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/bin/envs.net/envs_user_info.sh b/bin/envs.net/envs_user_info.sh index e2ffced..b638dc5 100755 --- a/bin/envs.net/envs_user_info.sh +++ b/bin/envs.net/envs_user_info.sh @@ -136,15 +136,17 @@ EOM field_exists+=( "$user_field" ) line_to_set["$user_field","$count_field_entry"]+="$user_value" else - # entry will be a array + # entry will be a array (max. 32 entrys) if ! [[ ":${field_is_array[*]}:" =~ $user_field ]]; then field_is_array+=( "$user_field" ) fi - count_field_entry="$(( "$count_field_entry" +1 ))" + count_field_entry="$(( "$count_field_entry" +1 ))" ; [ "$count_field_entry" -le '32' ] || continue line_to_set["$user_field","$count_field_entry"]+="$user_value" + highest_count_field_entry["$user_field"]="$count_field_entry" fi fi - done <<< "$(tac "$INFO_FILE")" # read file from buttom + #done <<< "$(tac "$INFO_FILE")" # read file from buttom + done < "$INFO_FILE" # add users custom entrys from line_to_set (single lines before arrays) # @@ -180,7 +182,8 @@ EOM cat << EOM >> "$TMP_JSON" "${line_to_set[$field]}", EOM - if [ "$field_count" -eq '0' ]; then + if [ "$field_count" -eq 0 ]; then + # ??? if [ "$field_count" = "$highest_count_field_entry" ]; then # end of user def. array # remove trailing ',' on last user entry unset field_in_progress From 5d6a3123c271eb8f0779d41a1649019fbb50f394 Mon Sep 17 00:00:00 2001 From: creme Date: Mon, 24 Feb 2020 16:14:58 +0100 Subject: [PATCH 2/7] . --- bin/envs.net/envs_user_info.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/bin/envs.net/envs_user_info.sh b/bin/envs.net/envs_user_info.sh index b638dc5..25a2ad7 100755 --- a/bin/envs.net/envs_user_info.sh +++ b/bin/envs.net/envs_user_info.sh @@ -116,12 +116,13 @@ EOM fi # user custom infos from .envs file (max. 10 entrys) if [ -f "$INFO_FILE" ]; then - count_entry='0' # use to limit entrys - count_field_entry='0' # use to separat array line by line + 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 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 @@ -141,8 +142,8 @@ EOM 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" line_to_set["$user_field","$count_field_entry"]+="$user_value" - highest_count_field_entry["$user_field"]="$count_field_entry" fi fi #done <<< "$(tac "$INFO_FILE")" # read file from buttom @@ -182,8 +183,7 @@ EOM cat << EOM >> "$TMP_JSON" "${line_to_set[$field]}", EOM - if [ "$field_count" -eq 0 ]; then - # ??? if [ "$field_count" = "$highest_count_field_entry" ]; then + if [ "$field_count" = "${hc_field_entry[$field_name]}" ]; then # end of user def. array # remove trailing ',' on last user entry unset field_in_progress From b2c4970381da2c2fea1b1aecdd21aff963b5ae22 Mon Sep 17 00:00:00 2001 From: creme Date: Mon, 24 Feb 2020 16:29:56 +0100 Subject: [PATCH 3/7] it works.. but why xD --- bin/envs.net/envs_user_info.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bin/envs.net/envs_user_info.sh b/bin/envs.net/envs_user_info.sh index 25a2ad7..21cbb18 100755 --- a/bin/envs.net/envs_user_info.sh +++ b/bin/envs.net/envs_user_info.sh @@ -146,7 +146,6 @@ EOM line_to_set["$user_field","$count_field_entry"]+="$user_value" fi fi - #done <<< "$(tac "$INFO_FILE")" # read file from buttom done < "$INFO_FILE" # add users custom entrys from line_to_set (single lines before arrays) @@ -183,7 +182,10 @@ EOM cat << EOM >> "$TMP_JSON" "${line_to_set[$field]}", EOM - if [ "$field_count" = "${hc_field_entry[$field_name]}" ]; then + + 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 From 5246529e85515a2602b2e314a725f6aab1fa2cb1 Mon Sep 17 00:00:00 2001 From: creme Date: Tue, 25 Feb 2020 14:09:47 +0100 Subject: [PATCH 4/7] wip: current users_info.sh --- bin/envs.net/envs_user_info.sh | 105 ++++++++++++++++++++------------- 1 file changed, 65 insertions(+), 40 deletions(-) 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 From 5f6a15e311fd6085bca6e66b5de44693831e5983 Mon Sep 17 00:00:00 2001 From: creme Date: Tue, 25 Feb 2020 15:48:02 +0100 Subject: [PATCH 5/7] current output: ``` "newfoo": [ "linez", "linex", "liney", "linez" ], "name": [ "line1", "line5" ], "projects": [ "envs.net | environments", "freifunk-dresden.de" ], ``` --- bin/envs.net/envs_user_info.sh | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/bin/envs.net/envs_user_info.sh b/bin/envs.net/envs_user_info.sh index de8a0fe..b09c0d3 100755 --- a/bin/envs.net/envs_user_info.sh +++ b/bin/envs.net/envs_user_info.sh @@ -33,28 +33,24 @@ progress_userarray() { "${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" + 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" + 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 + unset field_in_progress + field_finished+=( "$field_name" ) + fi + else + if ! [ "$field_in_progress" = "$field_name" ] && ! [[ ":${field_queue[*]}:" =~ $field_name ]]; then + field_queue+=( "$field_name" ) fi fi fi @@ -243,7 +239,6 @@ EOM # remove trailing ',' (no ssh-pubkey print out) clear_lastline fi -## if line 118 else # no "$INFO_FILE" file # remove trailing ',' for the last user entry From 1fc25b4c7fb570e1933c62c41e9672b2a89c2aad Mon Sep 17 00:00:00 2001 From: creme Date: Wed, 26 Feb 2020 12:56:54 +0100 Subject: [PATCH 6/7] works. but we need to find a small "name field"-bug: eg.: ``` newfoo=linew newfoo=linex newfoo=liney newfoo=linez "newfoo": [ "linew", "linez" ], ``` but it works with: ``` wfoo=linew wfoo=linex wfoo=liney wfoo=linez "wfoo": [ "linew", "linex", "liney", "linez" ], ``` --- bin/envs.net/envs_user_info.sh | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/bin/envs.net/envs_user_info.sh b/bin/envs.net/envs_user_info.sh index b09c0d3..8302209 100755 --- a/bin/envs.net/envs_user_info.sh +++ b/bin/envs.net/envs_user_info.sh @@ -19,6 +19,7 @@ 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//,*/}" @@ -26,7 +27,7 @@ progress_userarray() { if [[ ":${field_is_array[*]}:" =~ $field_name ]] && ! [[ ":${field_finished[*]}:" =~ $field_name ]]; then # begin of user def. array - if [ -z "$field_in_progress" ]; then + if [ -z "$field_in_progress" ] && [ "$field_count" -eq 0 ]; then field_in_progress="$field_name" cat << EOM >> "$TMP_JSON" "$field_name": [ @@ -48,10 +49,8 @@ EOM unset field_in_progress field_finished+=( "$field_name" ) fi - else - if ! [ "$field_in_progress" = "$field_name" ] && ! [[ ":${field_queue[*]}:" =~ $field_name ]]; then - field_queue+=( "$field_name" ) - fi + elif ! [ "$field_in_progress" = "$field_name" ] && ! [[ ":${field_queue[*]}:" =~ $field_name ]]; then + field_queue+=( "$field_name" ) fi fi fi @@ -156,8 +155,7 @@ EOM fi # user custom infos from .envs file (max. 10 entrys) if [ -f "$INFO_FILE" ]; then - count_entry='0' # use to limit entrys - count_field_entry='0' # use to separat array line by line + count_entry='0' 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 @@ -173,8 +171,8 @@ EOM if ! [[ ":${field_exists[*]}:" =~ $user_field ]]; then # entry will be a single line - count_entry="$(( "$count_entry" + 1 ))" ; count_field_entry="$(( "$count_field_entry" +1 ))" - #[ "$count_entry" -le '10' ] || continue + count_field_entry='0' + count_entry="$(( "$count_entry" + 1 ))" ; [ "$count_entry" -lt '10' ] || continue field_exists+=( "$user_field" ) line_to_set["$user_field","$count_field_entry"]+="$user_value" @@ -183,8 +181,7 @@ 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 + count_field_entry="$(( "$count_field_entry" +1 ))" ; [ "$count_field_entry" -lt '32' ] || continue hc_field_entry[$user_field]="$count_field_entry" line_to_set["$user_field","$count_field_entry"]+="$user_value" @@ -213,7 +210,8 @@ EOM progress_userarray - if [[ -n "$field_queue" ]]; then + if [ -n "${line_to_set[*]}" ]; then + # shellcheck disable=SC2034 for x in "${!field_queue[@]}"; do progress_userarray done From 4d68701a19a1dc80464dc872b7d77909a56029d3 Mon Sep 17 00:00:00 2001 From: creme Date: Wed, 26 Feb 2020 14:16:04 +0100 Subject: [PATCH 7/7] okay. --- bin/envs.net/envs_user_info.sh | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/bin/envs.net/envs_user_info.sh b/bin/envs.net/envs_user_info.sh index 8302209..fd80188 100755 --- a/bin/envs.net/envs_user_info.sh +++ b/bin/envs.net/envs_user_info.sh @@ -28,30 +28,32 @@ progress_userarray() { if [[ ":${field_is_array[*]}:" =~ $field_name ]] && ! [[ ":${field_finished[*]}:" =~ $field_name ]]; then # begin of user def. array if [ -z "$field_in_progress" ] && [ "$field_count" -eq 0 ]; then + fin_count='0' field_in_progress="$field_name" cat << EOM >> "$TMP_JSON" "$field_name": [ "${line_to_set[$field]}", EOM - else - if [ "$field_in_progress" = "$field_name" ]; then - # continue user def. array - cat << EOM >> "$TMP_JSON" + elif [ "$field_in_progress" = "$field_name" ] && [ "$field_count" = "$(( $fin_count + 1 ))" ]; then + # continue user def. array + fin_count="$(( $fin_count + 1 ))" + 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" + 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 - elif ! [ "$field_in_progress" = "$field_name" ] && ! [[ ":${field_queue[*]}:" =~ $field_name ]]; then - field_queue+=( "$field_name" ) + unset field_in_progress + field_finished+=( "$field_name" ) + else + progress_userarray fi + elif ! [ "$field_in_progress" = "$field_name" ] && ! [[ ":${field_queue[*]}:" =~ $field_name ]]; then + field_queue+=( "$field_name" ) fi fi done