Bash:意外令牌附近的语法错误`then'

use*_*870 -1 linux bash if-statement

错误发生在第21行......

if [ $weight1 -gt $weight2 ];
    then echo "Weight 2 should be greater than Weight 1."
else
    if [ $weight1 -ge 20 ] && [ $weight1 -le 39 ];
        then echo "Weight 1 is bike."
    else 
        echo "Weight 1 is either bicycle, car, van or lorry."
    fi
fi
Run Code Online (Sandbox Code Playgroud)

Мал*_*евъ 5

我没有看到问题,我的测试then关键字适用于您的情况,无论如何一些在您的代码中注明:

  1. then上线if操作:

    if [ $weight1 -ge 20 ] && [ $weight1 -le 39 ]; then
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将变量括在引号中:

    if [ "$weight1" -ge 20 ] && [ "$weight1" -le 39 ]; then
    
    Run Code Online (Sandbox Code Playgroud)
  3. 我建议使用-a密钥,而不是两次调用[app:

    if [ "$weight1" -ge 20 -a "$weight1" -le 39 ]; then
    
    Run Code Online (Sandbox Code Playgroud)

注意:错误Syntax error near unexpected token 'then'可能会在少数情况下上升:

  1. 在case then之外指定关键字时if:

    weight1=21
        then echo "Weight 1 is bike."
    else
        echo "Weight 1 is either bicycle, car, van or lorry."
    fi
    
    Run Code Online (Sandbox Code Playgroud)
  2. 当你指定then两次时:

    if [ "$weight1" -ge 20 -a "$weight1" -le 39 ]; then
    then echo "Weight 1 is bike."
    
    Run Code Online (Sandbox Code Playgroud)
  3. 当你放到then不正确的地方时,例如,在else经营者之后:

    else
    then
        echo "Weight 1 is either bicycle, car, van or lorry."
    fi
    
    Run Code Online (Sandbox Code Playgroud)