我在这里关注教程:http://bash.cyberciti.biz/guide/If..else..fi#Number_Testing_Script
我的脚本如下:
lines=`wc -l $var/customize/script.php`
if test $lines -le 10
then
echo "script has less than 10 lines"
else
echo "script has more than 10 lines"
fi
但我的输出如下:
./boot.sh: line 33: test: too many arguments
script has more than 10 lines
为什么说我的论点太多了?我没有看到我的脚本与教程中的脚本有何不同。
答案 0 :(得分:10)
wc -l file
命令将打印两个单词。试试这个:
lines=`wc -l file | awk '{print $1}'`
要调试bash脚本(boot.sh),您可以:
$ bash -x ./boot.sh
它会打印每一行。
答案 1 :(得分:8)
wc -l file
输出
1234 file
使用
lines=`wc -l < file`
只获取行数。此外,有些人更喜欢这种符号而不是反写:
lines=$(wc -l < file)
此外,由于我们不知道$var
是否包含空格,以及文件是否存在:
fn="$var/customize/script.php"
if test ! -f "$fn"
then
echo file not found: $fn
elif test $(wc -l < "$fn") -le 10
then
echo less than 11 lines
else
echo more than 10 lines
fi
答案 2 :(得分:1)
另外,你应该使用
if [[ $lines -gt 10 ]]; then
something
else
something
fi
test condition
真的已经过时了,它的直接继承者[ condition ]
也是如此,主要是因为你必须非常小心这些形式。例如,您必须引用传递给$var
或test
的任何[ ]
,还有其他细节会变得毛茸茸。 (测试作为任何其他命令以各种方式处理)。有关详细信息,请查看此article。