在两个for
语句中,出现以下错误:
./count_files.sh: line 21: [: too many arguments
./count_files.sh: line 16: [: too many arguments.
谁能帮我 ?
#!/bin/bash
files=($(find /usr/src/linux-headers-3.13.0-34/include/ -type f -name '[aeiou][a-z0-9]*.h'))
count=0
headerfiles=($(find /usr/src/linux-headers-3.13.0-34/include/ -type f -name '[_a-zA-Z0-9]*.h' | grep -v "/linux/"))
for file in "${files[@]}"
do
if ! [ grep -Fxq "linux/err.h" $file ];
then
localcount=0
for header in "${headerfiles[@]}"
do
if [ grep -Fxq $header $file ];
then
localcount=$((localcount+1))
if [ $localcount -eq 3 ];
then
count=$(($count+1))
break
fi
fi
done
localcount=0
fi
done
echo $count
最佳答案
问题行之一是:
if ! [ grep -Fxq "linux/err.h" $file ];
除非
then
在同一行上,否则末尾不需要分号。但是,它是无害的。似乎您要执行
grep
命令并检查它是否产生任何输出。但是,您只提供了带有四个字符串参数的test
(又名[
)命令(加上总共5个结束]
),其中第二个不是test
识别的选项之一。您可能已经打算使用此功能:
if ! [ -n "$(grep -Fxq "linux/err.h" "$file")" ]
(除非您的意思是
-z
而不是-n
;否定使我感到困惑)。但是,如果您对grep
是否发现任何东西感兴趣,则可以简单地测试grep
的退出状态:if grep -Fxq "linux/err.h" "$file"
嗯...
-q
是“安静”模式;因此实际上字符串测试将不起作用,因为grep
不产生任何输出。您需要直接测试退出状态,可能在后面测试!
逻辑而非运算符。关于linux - 的争论太多,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28002797/