我正在为一个类构建一个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`
并没有以正确的方式更新变量的值。
答案 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
。