我正在学习Unix,以下是作业中的一部分:
对于用户~/Documents目录中的每个文件和子目录,确定该项是文件还是目录,并使用文件名在语句中显示相应的信息。
因此,我写了以下内容:
docs=`ls ~/Documents`
for file in $docs ; do
if [ -f $file ] ; then
echo $file "is a file."
elif [ -d $file ] ; then
echo $file "is a directory."
else
echo $file "is not a file or directory."
fi
done
我的文档目录包括以下文件和目录:
DocList.txt (file)
Letter (file)
mypasswdfile (file)
samples (directory)
things (directory)
touchfile (file)
所以我认为输出应该是这样的:
DocList.txt is a file.
Letter is a file.
mypasswdfile is a file.
samples is a directory.
things is a directory.
touchfile is a file.
然而,这是输出结果:
DocList.txt is not a file or directory.
Letter is not a file or directory
mypasswdfile is not a file or directory
samples is not a file or directory
things is not a file or directory
touchfile is not a file or directory
我觉得我应该提一下,如果我把$docs变量设置为`ls ~',它将成功显示我的主目录的内容以及文件或目录的信息。但是对于我尝试过的其他路径,这种方法不起作用。
ls ~/Documents
的输出了? - Ignacio Vazquez-Abrams~
,当您键入ls DocList.txt
时,会看到什么?将其与ls ~/Documents/DocList.txt
进行比较。现在,考虑您的脚本正在执行相同的操作。 - glenn jackmanls
的缺点之一。你应该像这样做:for file in ~/Documents/*; do ...
- glenn jackman