显示“未找到命令”的程序

时间:2017-07-24 14:27:40

标签: bash shell

下面的代码在第12行显示“未找到命令”。我尝试了很多方法,但没有解决。问题是什么?有人能解释一下吗?

#!bin/bash
echo "How many number do you want to input?"
read numbers
echo "Give your input seperated by enter"
array=()
for (( i = 0 ; i < $numbers ; i=$i+1 ));
do
    read num;
    array+=($num);
done
for (( j = 0 ; j < $numbers-1 ; j=$j+1 ));
do
    if ["${array[$j]}" -gt "${array[$j+1]}"];
    then
        tempo=${array[$j]};
        array[$j]=${array[$j+1]};
        array[$j+1]=$temp;
    fi
done

for (( i = 0 ; i < $numbers ; i=$i+1 )); 
do 
    echo ${array[$i]};
done

3 个答案:

答案 0 :(得分:0)

将原始代码复制粘贴到shellcheck.net中会带来这个有用的结果:

Line 13:
    if ["${array[$j]}" -gt "${array[$j+1]}"];
    ^-- SC1009: The mentioned parser error was in this if expression.
       ^-- SC1035: You need a space after the [ and before the ].
       ^-- SC1073: Couldn't parse this test expression.
                                            ^-- SC1020: You need a space before the ].
                                            ^-- SC1072: Missing space before ]. Fix any mentioned problems and try again.

这是你的第一个问题,一个语法错误使得bash解析[以及它作为单个命令扩展后的任何内容,它无法找到。

修复后,shellcheck将能够解决许多其他问题,例如定义tempo变量,然后引用未定义的temp变量。

它产生的一些提示可能与您的用例无关(例如read重复反斜杠)。是否可以应用它们,但了解您正在使用的命令的缺点总是一件好事。

答案 1 :(得分:0)

删除此操作中的所有空格:j = 0。必须是:j=0

在bash中,变量赋值的语法为:name=[value]。你不能在=周围放置不带引号的空格,因为bash不会将此解释为你想要的任务。 Bash将大多数单词列表视为带参数的命令。

并在此行if ["${array[$j]}" -gt "${array[$j+1]}"];中添加空格。它必须是if [ "${array[$j]}" -gt "${array[$j+1]}" ];。您可以在此处阅读更多空格:Why should there be a space after '[' and before ']' in Bash?

答案 2 :(得分:0)

小心你在BASH的空间。第12行应为:

 if [ "${array[$j]}" -gt "${array[$j+1]}" ];