Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Shell脚本未创建数组列表_Arrays_Linux_Shell_Centos - Fatal编程技术网

Arrays Shell脚本未创建数组列表

Arrays Shell脚本未创建数组列表,arrays,linux,shell,centos,Arrays,Linux,Shell,Centos,我需要帮助解决一个奇怪的问题 这行没有创建数组列表,我不知道为什么 date_final=($(echo $((date_end-date_start)) | grep -o "[0-9].*")) # PROBLEM 整个代码如下所示,特定数组将错误的日期转换为新日期,但它应该是arraylist,并创建一个变量 #! /bin/bash cd /var/lib/zabbixsrv/externalscripts/Manager rm Unique.txt declare -a date

我需要帮助解决一个奇怪的问题

这行没有创建数组列表,我不知道为什么

 date_final=($(echo $((date_end-date_start)) | grep -o "[0-9].*")) # PROBLEM
整个代码如下所示,特定数组将错误的日期转换为新日期,但它应该是arraylist,并创建一个变量

#! /bin/bash

cd /var/lib/zabbixsrv/externalscripts/Manager
rm Unique.txt
declare -a date_final='()'
total_count=$(cat amazon.html 2>/dev/null | jq '.meta.total_count' | grep -o "[^\"]*")

i=0;
for i in $(seq 0 $total_count)
do
#compare=($(cat amazon.html 2>/dev/null |  jq ".objects[$i].service_tag" |  tr ' ' '\n'))
compare=($(cat amazon.html 2>/dev/null |  jq ".objects[$i].conference" | grep -o "[^\"]*" |  tr ' ' '\n'))
echo -e ${compare[@]}  >> /var/lib/zabbixsrv/externalscripts/Manager/Unique.txt
done

compare1=($(cat Unique.txt | uniq -c | gawk '$1==1{print $2}'))

Number_line=$(echo ${#compare1[@]}) # PROBLEMA RESOLVIDO!!!!

let Number_line-=1


#echo -e ${compare[@]}

for i in $(seq 0 $Number_line)
do

#time=$(cat amazon.html 2>/dev/null | jq  '.objects[] | select(.service_tag=='${compare1[$i]}')' | jq  ".connect_time" |  grep -o "[^\"]*" | grep -o "[^T][0-9].*" | grep -o "[0-9]\{2\}:[0-9]\{2\}:[0-9].")
time=$(cat amazon.html 2>/dev/null | jq  '.objects[] | select(.conference=='${compare1[$i]}')' 2>/dev/null | jq  ".connect_time" |  grep -o "[^\"]*" | grep -o "[^T][0-9].*" | grep -o "[0-9]\{2\}:[0-9]\{2\}:[0-9].")
#echo -e  ${compare1[$i]}
date_convert=$(date -d "$time 2 hour ago" +"%H:%M:%S")
date_start=$(date -d "$day $date_convert" +%s)
date_end=$(date +"%s")
date_final=($(echo $((date_end-date_start)) | grep -o "[0-9].*")) # PROBLEM
done
# rm Tenant.txt
#echo ${date_final[0]}
#echo -e ${date_final[@]}

tempo=1
i=0
echo -e  $Numero_linha
echo -e ${date_final[@]}


for i in $(seq 0 $Number_line)
do

if ((${date_final[$i]} > $tempo)) 2>/dev/null; then
        echo -e  ${compare1[$i]}
fi
done

非常感谢

我使用了您示例中的代码来声明
date\u final
并初始化
date\u start
date\u end
,在执行您有问题的语句后,我实际上得到了一个数组

我认为你的问题是你重复地给你的变量分配一个单元素数组,而不是添加元素

试试这个:

date_final+=( $((date_end-date_start)) )

这里的关键是使用
+=
操作符,它附加而不是赋值。剩下的只是清理,因为您不需要
grep
来过滤数字(计算结果中只有数字),也不需要
echo

我使用了您示例中的代码来声明
date\u final
并初始化
date\u start
date\u end
,在执行了有问题的语句之后,我得到了一个数组

我认为你的问题是你重复地给你的变量分配一个单元素数组,而不是添加元素

试试这个:

date_final+=( $((date_end-date_start)) )

这里的关键是使用
+=
操作符,它附加而不是赋值。剩下的只是清理,因为您不需要
grep
来过滤数字(计算结果中只有数字),也不需要
echo

declare-a date\u final='()“是的,我尝试了所有方法,不,该语句根本不会产生任何错误。在echo-e${date_final[@]}中,只显示第一个元素,其中有10个以上。不能有多个元素。当您执行$((date\u end-date\u start))计算时,它只生成一个数字字符串。然后你把它输入到“grep”中,它可能什么都不做,因为你的结果中只有数字开头。然后将其转换为单元素数组。我想我理解您的问题。没有缩进使我错过了这是在一个循环内。请看我的最新答案,几分钟后就出来。这很有趣,我会尝试declare-a date_final='()“是的,我什么都试过了,不,这句话一点错误都没有。在echo-e${date_final[@]}中,只显示第一个元素,其中有10个以上。不能有多个元素。当您执行$((date\u end-date\u start))计算时,它只生成一个数字字符串。然后你把它输入到“grep”中,它可能什么都不做,因为你的结果中只有数字开头。然后将其转换为单元素数组。我想我理解您的问题。没有缩进使我错过了这是在一个循环内。请看我的最新答案,几分钟后就会出来。这很有趣,我会试试的