简体   繁体   English

如何在数组bash脚本中附加每个变量

[英]How to append each variable in array bash Script

i want to append the variables values inside each condition into array as per the sequence ie here first 60s then 59.8S at last 30.8NI want to add the elements By my code only the last 4 elements are getting appended in array. 我想按照序列将每个条件中的变量值附加到数组中,即这里前60秒然后59.8S最后30.8NI想要添加元素通过我的代码只有最后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[@]}"

output is --- 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 30N 30.2N 30.5N 30.8N 4 输出为--- 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 30N 30.2N 30.5N 30.8N 4

I want array to whole variables values as elements in sequence 60N 59.8N ....... 30N 30.2N 30.5N 30.8N 我希望数组将整个变量值作为序列60N 59.8N ....... 30N 30.2N 30.5N 30.8N的元素

TIA.** I want array to whole variables values as elements in sequence 60N 59.8N ....... 30N 30.2N 30.5N 30.8N ** TIA。**我希望数组将整个变量值作为序列60N中的元素59.8N ....... 30N 30.2N 30.5N 30.8N **

Move array=() outside of the loop: 在循环外移动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[@]}"

Effectively, you're emptying it on every bit of the loop, and you set a maximum of 4 values. 实际上,您在循环的每个位上清空它,并且您最多设置4个值。 set -x is great for diagnosing these types of issues. set -x非常适合诊断这些类型的问题。

Use https://www.shellcheck.net/ to check your code. 使用https://www.shellcheck.net/检查您的代码。 Best practice and all that. 最佳实践和所有这些。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM