0

我正在为一个类构建一个 bourne 脚本,并且遇到了这个循环的问题。基本上,我正在构建一个循环来遍历指定目录中的所有文件,并确定有多少文件和目录以及有多少文件是可读、可写和/或可执行的。问题是,当我运行脚本时,它返回以下错误:

assignment4.sh: line 61: expr: command not found
assignment4.sh: line 61: expr: command not found
assignment4.sh: line 36: expr: command not found
assignment4.sh: line 41: expr: command not found
assignment4.sh: line 48: expr: command not found
assignment4.sh: line 55: expr: command not found
assignment4.sh: line 36: expr: command not found
assignment4.sh: line 41: expr: command not found
assignment4.sh: line 48: expr: command not found
assignment4.sh: line 36: expr: command not found
assignment4.sh: line 41: expr: command not found
assignment4.sh: line 48: expr: command not found

导致此错误的代码部分如下:

for filename in "$PATH"/"$1"/*
do
    if [ -f "$filename" ]
    then
        files=`expr $files + 1`

        if [ -r "$filename" ]
        then 
        readable=`expr $readable + 1`
        fi

        if [ -w "$filename" ]
        then    
            writeable=`expr $writeable + 1`
        fi

        if [ -x "$filename" ]
        then 
            executable=`expr $executable + 1`
        fi
    elif [ -d "$filename" ] 
    then
        directories=`expr $directories + 1`
    fi
done

我知道 expr 在我正在运行的机器上,因为我之前使用过它并且它正在工作,尽管我确实必须像在格式化之前一样使用它来更改语句的格式

var=`expr $var+1`

并且没有以正确的方式更新变量的值。

4

2 回答 2

2

脚本运行时的 $PATH 是什么?expr 始终存在(传统上在 /bin 中,但在 Linux 上的 /usr/bin 中)

但是您不能在 $PATH/$1/* 上进行迭代,因为 PATH 就像/bin:/usr/bin:/usr/local/bin不匹配任何目录一样。我想你想要for filename in $(echo -n $PATH | tr : ' ')/$1/*或类似的

于 2014-12-04T01:19:09.443 回答
0

如果这不是 Bourne 而是 POSIX sh(即与 90 年代初期标准化的行为兼容的 shell,而不是直接来自 70 年代的 shell),您可以使用:

readable=$((readable + 1))

...而不是依靠expr.

于 2014-12-04T01:20:33.217 回答