Посчитайте, ЕСЛИ процесс, что не так? - PullRequest
0 голосов
/ 19 сентября 2018

я учусь Bash Мне нужно рассчитывать процесс на IF и ELSE.Но в КОНЦЕ Программы это всегда показывает мне НОЛЬ.Но если я вставлю эхо, если покажи правильно.Что я иду не так?Thx

Мой код

# CHEQUEA SI  EXISTE JSON2.ML - SI NO EXISTE REALIZA EL POST
acount=0
acounte=0
bcount=0
bcounte=0
api=APP_USR-1447105125686073-091812-eeceb6a719ab67de157c32d7c0d6dbc7-335445253




# Borra archivos con errores  
find -type f -name '*.ml' -size 0 | while read f; do rm "${f%.*}."* ; done
find -type f -name '*.ml' -exec grep -c -q '"Validation error","error"' '{}' \; -exec rm '{}' \;
find -type f -name '*.ml' -exec grep -c -q 'invalid_token' '{}' \; -exec rm '{}' \;
find -type f -name '*.ml' -exec grep -c -q 'access_token.invalid' '{}' \; -exec rm '{}' \;
find -type f -name '*.ml' -exec grep -c -q 'body.invalid_field_types' '{}' \; -exec rm '{}' \;
find -type f -name '*.ml' -exec grep -c -q 'item.price.invalid' '{}' \; -exec rm '{}' \;
find -type f -name '*.ml' -exec grep -c -q 'FURY_SAVE_KVSAPI_ERROR' '{}' \; -exec rm '{}' \;


# Busca archivos .ml si no encuentra sube articulo JSON2
find . -type f -name '*.json2' | xargs bash -c 'for fname
do if [ ! -e ${fname}.ml ]
then curl -X POST -H "Content-Type: application/json" -d @${fname} https://web/api > ${fname}.ml 
(( acount++ ))
echo $acount
else
(( acounte++ ))
fi

done

' bash

# Busca archivos .ml si no encuentra sube articulo JSON3
find . -type f -name '*.json3' | xargs bash -c 'for fname
do if [ ! -e ${fname}.ml ]
then curl -X POST -H "Content-Type: application/json" -d @${fname} https://web/api > ${fname}.ml  
(( bcount++ ))
echo $bcount
else
(( bcounte++ ))
fi


done
echo  Total archivos JSON2 no subidos $acounte
echo  Total archivos JSON2 subidos $acount
echo  Total archivos JSON3 no subidos $bcounte
echo  Total archivos JSON3 subidos $bcount
tacounte=$(echo $acounte)
tacount=$(echo $acount)
tbcounte=$(echo $bcounte)
tbcount=$(echo $bcount)
' bash

echo  Total archivos JSON2 no subidos $tacounte
echo  Total archivos JSON2 subidos $tacount
echo  Total archivos JSON3 no subidos $tbcounte
echo  Total archivos JSON3 subidos $tbcount

Это шоу

эхо Всего архивов JSON2 без субидо $ tacounte 0

эхо Всего архивов JSON2 субидо $ тако0

эхо Всего архивов JSON3 без субидо $ tbcounte 0

эхо Всего архивов JSON3 субидо $ tbcount 0

1 Ответ

0 голосов
/ 19 сентября 2018

У вас есть два разных счетчика, которые оказались с одинаковыми именами.Например, у вас есть acount в родительском процессе, который изначально установлен в 0 и никогда не менялся.Это то, что печатается.Затем у вас есть acount в каждом дочернем процессе, который выполняется командой xargs.Этот счетчик увеличивается отдельно в каждом дочернем процессе, но никогда не печатается.

Вы можете переместить печать счетчика в дочерний процесс, но, поскольку у вас может быть (в зависимости от количества задействованных файлов) несколько дочерних процессов, это не гарантирует, что вы действительно увидите общее количество.

В вашем случае, xargs не является подходящим инструментом.В качестве альтернативы, вы можете вместо этого направить вывод вашего find в while read .... цикл.

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