[英]How to append each variable in array bash Script
我想按照序列将每个条件中的变量值附加到数组中,即这里前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[@]}"
输出为--- 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
我希望数组将整个变量值作为序列60N 59.8N ....... 30N 30.2N 30.5N 30.8N的元素
TIA。**我希望数组将整个变量值作为序列60N中的元素59.8N ....... 30N 30.2N 30.5N 30.8N **
在循环外移动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/
检查您的代码。 最佳实践和所有这些。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.