为什么我的变量在我的 bash while 循环中似乎没有增加? [英] Why doesn't my variable seem to increment in my bash while loop?

查看:23
本文介绍了为什么我的变量在我的 bash while 循环中似乎没有增加?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对 bash 脚本很陌生.我似乎无法在 bash 脚本中的 while 循环结束时获得要显示的计数变量的正确值.

I am fairly new to bash scripting. I can't seem to get the correct value of my counting variables to display at the end of of a while loop in my bash script.

背景:我有一个相当简单的任务:我想将一个包含文件路径列表的文本文件传递给 bash 脚本,让它检查这些文件是否存在,并计算现有/丢失文件的数量.除了计数部分,我让大部分脚本都可以工作.

Background: I have a fairly simple task: I would like to pass a text file containing a list of file paths to a bash script, have it check for the existence of those files, and count the number of existing/missing files. I got most of the script to work, except for the counting part.

N=0
correct=0
incorrect=0
cat $1 | while read filename ; do
    N=$((N+1))
    echo "$N"

    if ! [ -f $filename ]; then

        incorrect=$((incorrect+1))
    else
        correct=$((correct+1))

    fi

done

echo "# of Correct Paths: $correct"
echo "# of Incorrect Paths: $incorrect"
echo "Total # of Files: $N"

如果我有 5 个文件的列表,其中 4 个存在,我希望得到以下输出(注意 while 循环中的 echo 命令):

If I have a list of 5 files, 4 of which exist, I expect to get the following output (note the echo command within the while loop):

1
2
3
4
5
# of Correct Paths: 4
# of Incorrect Paths: 1
Total # of Files: 5

相反,我得到:

1
2
3
4
5
# of Correct Paths: 0
# of Incorrect Paths: 0 
Total # of Files: 0

这些变量的值发生了什么变化?Google 提出了许多质量有问题的建议,我想我可以通过更多的搜索来让它发挥作用,但简要说明我做错了什么会非常有帮助.

What happened to the values of these variables? Google had many suggestions of questionable quality and I think I could get it to work with a little more searching, but a brief explanation of what I'm doing wrong would be very helpful.

推荐答案

这是因为您将无用的cat 命令与管道一起使用,导致创建了一个子shell.在没有 cat 的情况下试试:

This is because you are using the useless cat command with a pipe, causing a subshell to be created. Try it without the cat:

while read filename ; do
    N=$((N+1))
    ....
done < file

这篇关于为什么我的变量在我的 bash while 循环中似乎没有增加?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆