尝试使用命令行参数时,将ls命令传递给for循环中断

时间:2018-06-14 05:32:27

标签: bash

我正在编写一个简单的脚本来列出目录中的所有文件,以及每个文件实际上是文件还是目录。如果它是一个目录,那么它输出目录中有多少文件。

#!/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

2 个答案:

答案 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