我正在尝试读取文件夹中的文件,然后对它们执行某些操作。所以我需要获取现有文件的数量然后遍历它们。我这样做是为了获得数量,但随后却失败了。
#!/bin/sh
LIMIT=expr find . -maxdepth 1 -not -type d | wc -l;
i=1;
echo $LIMIT;
while [ "$i" -lt $LIMIT ]
Throws an error: ./converting.sh: 7: [: Illegal number:
您认为我错过了什么?任何一种转换? 在此先感谢,我不是一个bash脚本编写者,它让我疯狂!
答案 0 :(得分:3)
我认为你只想要一个简单的for
循环并提前休息:
LIMIT=10
for f in ./*; do
[[ -d $f ]] && continue
((++i == LIMIT)) && break
...
done
答案 1 :(得分:2)
我可以提供不同的方法:
#!/bin/bash
FILES=/path/to/*
for f in $FILES
do
echo "Processing $f file..."
# take action on each file. $f store current file name
cat "$f"
done
答案 2 :(得分:0)
这就是你的代码破解的原因:你忘了使用命令替换语法。
LIMIT=expr find . -maxdepth 1 -not -type d | wc -l;
shell调用find
命令,添加值为LIMIT
的变量"expr"
以查找环境。退出find|wc
管道后,变量LIMIT
不存在。你应该写的
LIMIT=$(find . -maxdepth 1 -not -type d | wc -l)
继续使用您的代码,当您到达此行时,您会收到错误:
while [ "$i" -lt $LIMIT ]
此处,$LIMIT
被替换为空,因此shell会看到[ "$i" -lt ]
。在我的系统上,/ bin / sh符号链接到bash,我得到:
$ /bin/sh
sh-4.3$ i=10
sh-4.3$ unset LIMIT
sh-4.3$ if [ "$i" -lt $LIMIT ]; then echo Y; else echo N; fi
sh: [: 10: unary operator expected
N
出现“一元运算符”错误,因为我只向[
命令传递了2个参数。使用2个参数,第一个参数应该是一个运算符,第二个参数应该是它的操作数。 10
不是[
命令所知的运算符。