【问题标题】:Count IF process , what is wrong?计算 IF 进程,有什么问题?
【发布时间】:2018-09-19 03:31:19
【问题描述】:

我正在学习 bash 我需要计算 IF 和 ELSE 上的过程。 但是在程序结束时,这告诉我总是零。 但是如果我把回声放进去,如果显示正确。 我怎么了? 谢谢

我的代码

# 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

这个节目

echo Total archivos JSON2 no subidos $tacounte 0

echo Total archivos JSON2 subidos $tacount 0

echo Total archivos JSON3 no subidos $tbcounte 0

echo Total archivos JSON3 subidos $tbcount 0

【问题讨论】:

  • 这和javascript有什么关系?
  • sry 我退出了标签!

标签: bash shell if-statement command


【解决方案1】:

您有两个不同的计数器,它们恰好具有相同的名称。例如,您的父进程中有 acount,它最初设置为 0 并且从未更改过。这是打印出来的。然后你在每个由 xargs 命令执行的子进程中都有一个acount。此计数器在每个子进程中单独递增,但从不打印。

您可以将计数器的打印移到子进程中,但由于您可能有(取决于所涉及的文件数量)多个子进程,这并不能保证您真正看到总计数。

在您的情况下, xargs 不是合适的工具。作为替代方案,您可以将find 的输出通过管道传输到while read .... 循环中。

【讨论】:

  • “示例”是什么意思?只需使用find .... | while read ... 进行计数,就像在脚本中删除大小为零的文件一样。
猜你喜欢
  • 1970-01-01
  • 2020-06-02
  • 1970-01-01
  • 1970-01-01
  • 2017-01-15
  • 2017-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多