Bash 如何访问用户主目录

Bash 如何访问用户主目录,bash,Bash,我正在尝试编写一个接受两种不同输入的bash脚本。一个是每行有一个用户的文件。例如,我当前测试的文件是: 彼得 罗杰 卡西 克洛伊 挡泥板 第二个输入是输出应该通过管道传输到的位置。我们想要对这两个输入做的是转到每个用户的主目录并查找5个文件(名为a、b、c、d、e)。然后我们要计算每个用户拥有这五个文件中的多少个。我知道正确的数字/输出应该是: 彼得,3岁 罗杰,1 卡西,2岁 克洛伊,5岁 挡泥板,0 然而,我不确定如何到达这里,因为我以前从未做过bash脚本,所以我不熟悉这里的元素 我尝试

我正在尝试编写一个接受两种不同输入的bash脚本。一个是每行有一个用户的文件。例如,我当前测试的文件是: 彼得 罗杰 卡西 克洛伊 挡泥板 第二个输入是输出应该通过管道传输到的位置。我们想要对这两个输入做的是转到每个用户的主目录并查找5个文件(名为a、b、c、d、e)。然后我们要计算每个用户拥有这五个文件中的多少个。我知道正确的数字/输出应该是: 彼得,3岁 罗杰,1 卡西,2岁 克洛伊,5岁 挡泥板,0 然而,我不确定如何到达这里,因为我以前从未做过bash脚本,所以我不熟悉这里的元素

我尝试在while循环中使用for循环(如下所示)

读行时
;做
计数器=0
因为我在b c d e
做
#/var/www/html/user_name/是问题中提供给我们的主目录
如果[-e/var/www/html/$line/$i];
然后
让计数器=$counter+1
fi
#将需要管道$线,计数器到$2,但不知道如何
完成
完成

正如我上面所说的,我只需要NAME、COUNT形式的输出,我需要将其作为第二个参数导入用户输入的任何位置。

首先,我将构建目录路径。然后将
ls
egrep
wc
一起使用以获取计数。假设您的文件是
test.txt
,它可能看起来像

while read line; do
    printf "%s,%s\n" $line $(ls /var/www/html/$line | egrep "^[a|b|c|d|e]$" | wc -l)
done < test.txt
读行时
;做
printf“%s,%s\n”$line$(ls/var/www/html/$line | egrep“^[a | b | c | d | e]$”| wc-l)
完成
当前用户的主目录在bash中别名为
~
;这能解决您的问题吗?那么我可以只做~$line来获取主目录吗?您需要一个斜杠
~/$line
不确定这里的$line是什么意思,但是
~
扩展到完整的目录路径,而不带尾随斜杠。所以一定要记住这一点。$line将是用户名,因为第一个输入的每一行都是一个用户。所以这是很多语法,我不理解,到底是怎么回事,test.txt将是$2,因为我们想将输出导入第二个输入中?不。test.txt将是您的输入文件。如果您想重定向上面的输出(并且$1是您的输入);然后
done<$1>$2
done<$1 | tee$2
并观看它运行。哇,它工作得非常好。但你能解释一下到底发生了什么吗?我真的很想学习bash的语法,你想对哪一部分做更多的解释?
$()
部分、
打印部分、循环部分还是重定向部分?当然是$()部分,不太清楚那里发生了什么