在bourne脚本中出现错误“expr:command not found”

时间:2014-12-04 01:11:05

标签: shell sh expr

我正在为一个类构建一个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`

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

2 个答案:

答案 0 :(得分:2)

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

但是你不能在$ PATH / $ 1 / *上迭代,因为PATH就像/bin:/usr/bin:/usr/local/bin,它与任何目录都不匹配。我想你想要for filename in $(echo -n $PATH | tr : ' ')/$1/*或其他一些

答案 1 :(得分:0)

如果这不是Bourne而是POSIX sh(也就是说,一个外壳兼容90年代早期标准化的行为,而不是直接来自70年代的行为),你可以使用:

readable=$((readable + 1))

......而不是依赖expr