完成的产品用于递归计算指定目录中的所有内容,如果没有输入参数,则为当前计数。现在我只是想让它计算指定目录中的任何内容。我很难在最后的陈述中算上任何东西。 它将回显目录中的0个文件。
有人能给我任何提示吗?我还是个初学者,所以请放轻松,谢谢!
#!/bin/bash
#A shell script program that counts recursively how many directories/files exist in a given directory.
declare -i COUNT=0
declare -i COUNT2=0
#The script will treat COUNT as an integer that is 0 until modified.
if [ "$#" -eq "0" ]
then
for i in *
do
((COUNT++))
done
((COUNT--)) #This is done because there is always an overcount of 1.
echo "There are $COUNT files and/or directories in the current directory here."
fi
if [[ -d $1 ]]
then
for i in $1
do
((COUNT++))
done
((COUNT--)) #This is done because there is always an overcount of 1.
echo "There are $COUNT files and/or directories in $1."
fi
if [[ -d $2 ]]
then
for i in $2
do
((COUNT2++))
done
((COUNT2--)) #This is done because there is always an overcount of 1.
echo "There are $COUNT2 files and/or directories in $2."
fi
exit 0
答案 0 :(得分:4)
首先,你可以用单行做你想做的事:
find . | wc -l
find .
表示“在当前目录和所有子目录中搜索”。由于没有其他参数,它将简单列出所有内容。然后,我使用管道wc
,代表“字数”。 -l
选项表示“仅输出行数”。
现在,对于您的代码,这里有一些提示。首先,我真的不明白为什么你重复你的代码三次(0,$ 1和$ 2)。你可以这样做:
dir="$1"
if [ -z "$dir" ]; then dir="."; fi
将命令行参数的值存储在$ dir中,如果没有提供,( - z表示“为空”),则为dir指定默认值。
如果for i in $1
是目录的路径, $1
将无效。相反,您可以使用
for i in $(ls $dir)
此外,在您的代码中,您不会递归计算。它是自愿的还是你不知道如何继续?