在bash脚本中检查脚本的输入参数是否为空

时间:2018-03-20 08:10:12

标签: bash shell

这是一个小型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

谢谢。

1 个答案:

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