Как добавить каждую переменную в массив bash Script - PullRequest
0 голосов
/ 02 апреля 2019

Я хочу добавить значения переменных внутри каждого условия в массив в соответствии с последовательностью, то есть здесь сначала 60 с, затем 59,8 с, наконец, 30,8 Н. Я хочу добавить элементы По моему коду только последние 4 элемента добавляются в массив.

#!/bin/bash
for i in $(seq -60 1 30);do
nextint=$((i+1))
sum=$((i+nextint))
mid=`echo "$sum / 2" | bc -l`

sum=`echo $i + $mid | bc`
topmid=`echo "$sum / 2" | bc -l`

sum=`echo $mid + $nextint | bc`
bottommid=`echo "$sum / 2" | bc -l`
k=0.0
#printf "$i%.*f\n$topmid%.*f\n$mid%.*f\n$bottommid%.*f\n"
# "$topmid $mid $bottommid"

#printf "%.*f\n" $i $topmid $mid $botttommid
   n='N'
   s='S'
   array=()
if (( $(echo "$i == $k" | bc -l) )); then
       i=$( printf "%.f\n" "$i")
      topmid=$(printf "%.1f\n" "$topmid")
      mid=$(printf "%.1f\n" "$mid")
     bottommid=$( printf "%.1f\n" "$bottommid")

           topmid=$topmid$n
           mid=$mid$n
           bottommid=$bottommid$n
           echo "$i"
           echo "$topmid"
           echo "$mid"
           echo "$bottommid"

         array+=("$i")
         array+=("$topmid")
         array+=("$mid")
         array+=("$bottommid")
# echo "${array[@]}"
#fi
#done
elif (( $( echo "$i > $k" |bc -l ) ))
        #n='N'
then
      i=$( printf "%.f\n" "$i")
      topmid=$(printf "%.1f\n" "$topmid")
      mid=$(printf "%.1f\n" "$mid")
     bottommid=$( printf "%.1f\n" "$bottommid")
           i=$i$n
           topmid=$topmid$n
           mid=$mid$n
           bottommid=$bottommid$n
           echo "$i"
     #      eco "${array[@]}"
           echo "$topmid"
           echo "$mid"
           echo "$bottommid"
          array+=("$i")  
         array+=("$topmid")
         array+=("$mid")
         array+=("$bottommid")
else
        #s='S'
<<com
      printf "%.f\n" "$i"
      printf "%.1f\n" "$topmid"
      printf "%.1f\n" "$mid"
      printf "%.1f\n" "$bottommid"
com
      i=$( printf "%.f\n" "$i")
      topmid=$(printf "%.1f\n" "$topmid")
      mid=$(printf "%.1f\n" "$mid")
      bottommid=$( printf "%.1f\n" "$bottommid")
           i=$(echo $i$s| sed 's/-//g')
           topmid=$(echo $topmid$s | sed 's/-//g')
           mid=$(echo $mid$s | sed 's/-//g')
           bottommid=$(echo $bottommid$s | sed 's/-//g')
           echo "$i"
           echo "$topmid"
           echo "$mid"
           echo "$bottommid"
          array+=(" $i")
         array+=(" $topmid")
         array+=(" $mid")
         array+=("$bottommid")


fi
done
echo "${array[*]}"
echo "${#array[@]}"

выход --- 60S 59.8S 59.5S 59.2S 59S 58.8S 58.5S 58.2S 58S ..... 28.8N 29N 29.2N 29.5N 29.8N 30N 30.2N 30.5N 30.8N 30Н 30,2Н 30,5Н 30,8Н 4

Я хочу, чтобы массив представлял собой целые значения переменных как элементы в последовательности 60N 59,8N ....... 30N 30,2N 30,5N 30,8N

ТИА. ** Я хочу, чтобы массив представлял собой целые значения переменных как элементы в последовательности 60N 59,8N ....... 30N 30,2N 30,5N 30,8N **

1 Ответ

0 голосов
/ 02 апреля 2019

Перемещение array=() вне цикла:

#!/bin/bash
array=()
for i in $(seq -60 1 30);do
nextint=$((i+1))
sum=$((i+nextint))
mid=`echo "$sum / 2" | bc -l`

sum=`echo $i + $mid | bc`
topmid=`echo "$sum / 2" | bc -l`

sum=`echo $mid + $nextint | bc`
bottommid=`echo "$sum / 2" | bc -l`
k=0.0
#printf "$i%.*f\n$topmid%.*f\n$mid%.*f\n$bottommid%.*f\n"
# "$topmid $mid $bottommid"

#printf "%.*f\n" $i $topmid $mid $botttommid
   n='N'
   s='S'

if (( $(echo "$i == $k" | bc -l) )); then
       i=$( printf "%.f\n" "$i")
      topmid=$(printf "%.1f\n" "$topmid")
      mid=$(printf "%.1f\n" "$mid")
     bottommid=$( printf "%.1f\n" "$bottommid")

           topmid=$topmid$n
           mid=$mid$n
           bottommid=$bottommid$n
           echo "$i"
           echo "$topmid"
           echo "$mid"
           echo "$bottommid"

         array+=("$i")
         array+=("$topmid")
         array+=("$mid")
         array+=("$bottommid")
# echo "${array[@]}"
#fi
#done
elif (( $( echo "$i > $k" |bc -l ) ))
        #n='N'
then
      i=$( printf "%.f\n" "$i")
      topmid=$(printf "%.1f\n" "$topmid")
      mid=$(printf "%.1f\n" "$mid")
     bottommid=$( printf "%.1f\n" "$bottommid")
           i=$i$n
           topmid=$topmid$n
           mid=$mid$n
           bottommid=$bottommid$n
           echo "$i"
     #      eco "${array[@]}"
           echo "$topmid"
           echo "$mid"
           echo "$bottommid"
          array+=("$i")  
         array+=("$topmid")
         array+=("$mid")
         array+=("$bottommid")
else
        #s='S'
<<com
      printf "%.f\n" "$i"
      printf "%.1f\n" "$topmid"
      printf "%.1f\n" "$mid"
      printf "%.1f\n" "$bottommid"
com
      i=$( printf "%.f\n" "$i")
      topmid=$(printf "%.1f\n" "$topmid")
      mid=$(printf "%.1f\n" "$mid")
      bottommid=$( printf "%.1f\n" "$bottommid")
           i=$(echo $i$s| sed 's/-//g')
           topmid=$(echo $topmid$s | sed 's/-//g')
           mid=$(echo $mid$s | sed 's/-//g')
           bottommid=$(echo $bottommid$s | sed 's/-//g')
           echo "$i"
           echo "$topmid"
           echo "$mid"
           echo "$bottommid"
          array+=(" $i")
         array+=(" $topmid")
         array+=(" $mid")
         array+=("$bottommid")


fi
done
echo "${array[*]}"
echo "${#array[@]}"

Фактически вы очищаете его на каждом бите цикла и устанавливаете максимум 4 значения.set -x отлично подходит для диагностики проблем такого типа.

Используйте https://www.shellcheck.net/ для проверки кода.Лучшая практика и все такое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...