【发布时间】:2011-06-30 23:31:06
【问题描述】:
我对 bash 脚本相当陌生。在我的 bash 脚本中,我似乎无法在 while 循环的末尾显示正确的计数变量值。
背景:我有一个相当简单的任务:我想将一个包含文件路径列表的文本文件传递给 bash 脚本,让它检查这些文件是否存在,并计算现有/丢失文件的数量.我得到了大部分脚本的工作,除了计数部分。
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 命令):
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
这些变量的值发生了什么变化?谷歌有很多质量有问题的建议,我想我可以通过更多的搜索来让它工作,但简要解释一下我做错了什么会很有帮助。
【问题讨论】:
-
您可以使用
((N++))和((incorrect++))(甚至((N+=1)))以获得更简洁的语法。
标签: bash shell variables scripting