意外标记'else'附近的语法错误

时间:2015-01-20 21:52:30

标签: bash

我现在已经看了大约30分钟,似乎无法找到错误。它发生在我最后的if / else块。

default()
{
for file in /*
do
        if [ -f $file ]; then
                ((filecount++))
        elif [ -d $file ]; then
                ((dircount++))
        fi
done
echo The number of files is "$filecount"
echo The number of directories is "$dircount"
}
specific()
{
for file in $param
do
        if [ -f $file ]; then
                ((filecount++))
        elif [ -d $file ]; then
                ((dircount++))
        fi
done
echo The number of files is "$filecount"
echo The number of directories is "$dircount"
}
#Variables
declare -a param=$1
declare -i filecount="0"
declare -i dircount="0"
#Action
if [ $param=='-h' ]; then
        echo To use this program, enter a directory path after $0 or leave it blank to use current directory.
elif [ $param=='' ]; then
        default()
else
        specific()
fi
exit 0

这是错误代码。任何帮助表示赞赏。

./countf.sh: line 44: syntax error near unexpected token `else'
./countf.sh: line 44: `else'

1 个答案:

答案 0 :(得分:0)

我只检查了你的语法并发现了这些错误。

  1. 函数调用。正如@Etan Reisner所说。
  2. 比较运算符周围需要空格。像[ $param == '-h' ];
  3. 你需要双引号变量。使用[ "$param" == '-h' ]代替[ $param == '-h' ]。请查看此内容以获取更多详Double quote to prevent globbing and word splitting
  4. 我建议你在这里测试你的脚本。 http://www.shellcheck.net/我也应该先做,而不是手动检查你的脚本。