我正在编写一个简单的脚本来列出目录中的所有文件,以及每个文件实际上是文件还是目录。如果它是一个目录,那么它输出目录中有多少文件。
#!/bin/bash
for filename in $(ls)
do
if [ -f "$filename" ]
then
printf "$filename - file\n"
fi
if [ -d "$filename" ]
then
count=$(ls "$filename" | wc -l)
printf "$filename - directory $count files\n"
fi
done
这完全没问题。但是,如果我尝试将命令行参数(目录名称)传递给ls,则脚本不起作用。有谁知道导致这种情况的原因。示例如下。
#!/bin/bash
for filename in $(ls $1)
do
if [ -f "$filename" ]
then
printf "$filename - file\n"
fi
if [ -d "$filename" ]
then
count=$(ls "$filename" | wc -l)
printf "$filename - directory $count files\n"
fi
done
答案 0 :(得分:0)
当您将目录作为参数传递时,不应检查文件$ filename,而是$ 1 / $ filename。
如果您确定总是存在争论,则应使用以下内容:
@Value
如果dirname作为参数是可选的,您应该根据需要检查是否存在参数和进程。我的建议是:
#!/bin/bash
for filename in $(ls "$1")
do
if [ -f "$1/$filename" ]
then
printf "$1/$filename - file\n"
fi
if [ -d "$1/$filename" ]
then
count=$(ls "$1/$filename" | wc -l)
printf "$1/$filename - directory $count files\n"
fi
done
答案 1 :(得分:0)
+---+-----+---+--------+
| id|phone| pc|security|
+---+-----+---+--------+
| 3| 0| 2| 3|
| 1| 4| 2| 2|
| 2| 2| 0| 1|
+---+-----+---+--------+
中存在 $filename
。您在当前(directory/$filename
)目录中检查$filename
。
您应该查看./
directory/$filename