2017-01-16 3 views
0

私は奇妙な問題について助けが必要です。シェルスクリプトが配列リストを作成していない

この行は配列リストを作成していませんが、その理由はわかりません。

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 

どうもありがとうございました

答えて

2

私はdate_finalを宣言しdate_startdate_endを初期化するために、あなたの例からコードを使用している、と私は実際にあなたの問題文を実行した後に、配列を取得します。

私は、要素を追加するのではなく、変数に1要素の配列を繰り返し割り当てていると思います。ここで重要なのではなく、割り当ての追加+=オペレータを、usineある

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

はこれを試してみてください。残りの部分は、数字のフィルタリングにgrep(計算結果に数字のみが含まれています)が不要で、echoのいずれも必要ありません。

+0

declare -a date_final = '()' はい私はすべてを試しましたが、ステートメントは何のエラーも発生しません。 echo -e $ {date_final [@]}では、fisrt要素だけが表示され、10個以上あります。 – Daniel

+0

複数の要素を含めることはできません。 $((date_end-date_start))計算を実行すると、数字の文字列が1つだけ生成されます。そして、あなたはそれを "grep"に送ります。あなたの結果で始まる数字だけがあるので、おそらく何もしません。これは、1要素配列に変換されます。 – Fred

+0

私はあなたの問題を理解していると思います。インデントがないと、これはループの内側にあると思います。私の更新された答えを見てください、数分で来ています。 – Fred

関連する問題