Ubuntu 终端中条件表达式和“then”附近的语法错误

Syntax error in conditional expression and near `then' in Ubuntu terminal

我刚开始学习终端命令,正在尝试创建自己的命令,但遇到以下问题

 ./myFile: line 10: syntax error in conditional expression
 ./myFile: line 11: syntax error near `then'
 ./myFile: line 11: `    then'

有我的代码

#!/bin/bash
echo "please enter name of the folder"
read NAME1

if [[ $NAME1 ]]  
then
  echo "enter first number"
  read NUM1

  if [[ $NUM1 ]] && [[ $NUM1 -ge 0]] 
  then
    echo "enter last number"
    read NUM2

    if [[ $NUM2 ]] && [[ $NUM2 -gt $NUM ]]  
    then
      mkdir $NAME1{$NUM1..$NUM2}
    else
      echo"please enter last number to continue"
    fi
  else
    echo "please enter first number to continue"
  fi

else
  echo "please enter name of the folder to continue"
fi

首先,表达式 [[ $NAME1 ]] 无效,或者至少,它没有按照您的想法行事。我相信您正在尝试确定用户是否实际输入了字符串。为此,您应该测试 non-empty 字符串 ([[ -n ${NAME1} ]]) 或测试长度大于零的字符串 ([[ ${#NAME1} -gt 0 ]])。当您测试 $NUM1$NUM2.

时同样适用

其次,在处理用户输入时,应注意避免测试空字符串。这最好通过引用变量来实现。例如:[[ "${NUM1}" -gt 0 ]].

第三,space在测试中很重要。始终在 [[ 之后和 ]].

之前留下一个 space

此外,$NUM(第 15 行)未声明,因此计算结果为空字符串。这应该在脚本的较早位置设置。

此脚本还有许多其他方面可以改进(例如检查数字输入、检查有效文件夹名称等)。但上述更改应该可以让您克服直接错误。