这是一个小型bash程序,其任务是查看目录并计算目录中有多少文件。它是忽略其他目录而只计算文件。
下面是我的bash代码,它似乎无法统计目录中的文件,我说这是因为如果我删除if语句并只是递增计数器,for循环继续迭代并在计数器中打印4(这包括目录虽然)。使用if语句将其打印到控制台。
folder1 has files
查看其他问题我认为if语句中的表达式是正确的,我的语法或其他问题没有编译错误。
所以我只是傻眼了,为什么它不计算文件。
#!/bin/bash
folder=$1
if [ $1 = empty ]; then
folder=empty
counter=0
echo $folder has $counter files
exit
fi
for d in $(ls $folder); do
if [[ -f $d ]]; then
let 'counter++'
fi
done
echo $folder has $counter files
谢谢。
答案 0 :(得分:0)
您的整个脚本可以非常简化,如下所示,并进行了增强。切勿以编程方式使用ls
的输出。它应该在命令行中仅使用 。 -z
构造允许您断言其后面的参数是空还是非空。
对于循环文件,使用shell提供的默认glob扩展。请注意,当操作数的左侧返回真实条件时,&&
是执行操作的简写,其方式相当于if <condition>; then do <action>; fi
#!/usr/bin/env bash
[ -z "$1" ] && { printf 'invalid argument passed\n' >&2 ; exit 1 ; }
shopt -s nullglob
for file in "$1"/*; do
[ -f "$file" ] && ((count++))
done
printf 'folder %s had %d files\n' "$1" "$count"