条件无法工作时Bash脚本

条件无法工作时Bash脚本,bash,Bash,我不熟悉bash脚本。我今天写了这个小剧本。当我运行它时,它返回错误:./test1.sh:第8行:[n!=y]]:找不到命令。我试过几种不同的组合,但都没能成功 #!/bin/bash function ask_yes_or_no { local exitLoop="n" local answer="" while ["$exitLoop" != "y"]] do read -p "$1 (y/n)? " choice case "$choice"

我不熟悉bash脚本。我今天写了这个小剧本。当我运行它时,它返回错误:./test1.sh:第8行:[n!=y]]:找不到命令。我试过几种不同的组合,但都没能成功

#!/bin/bash

function ask_yes_or_no
{
  local exitLoop="n"
  local answer=""
  while ["$exitLoop" != "y"]]
    do
      read -p "$1 (y/n)? " choice
      case "$choice" in 
        y|Y ) 
          answer="y"
          exitLoop="y"
          ;;
        n|N ) 
          answer="y"
          exitLoop="y"
          ;;
      esac
    done

  echo $answer
}

retVal=$(ask_yes_or_no "Do you want to continue")

echo $retVal;

exit 0

如果你把我评论中的所有评论放在一起,并借助于,下面是第一个版本:

#!/bin/bash --

function ask_yes_or_no() 
{
  local exitLoop="n"
  local answer=""
  while [ "$exitLoop" != "y" ]
  do
    read -r -p "$1 (y/n)? " choice
    case "$choice" in
      y|Y )
        answer="y"
        exitLoop="y"
        ;;
      n|N )
        answer="n"
        exitLoop="y"
        ;;
    esac
  done

  echo $answer
}

retVal=$(ask_yes_or_no "Do you want to continue")

echo "$retVal";

exit 0
所以,你的第一次尝试几乎是好的。如评论中所述,while条件中有2个结尾]]而不是],并且有重要的空格字符需要添加。其余部分来自shellcheck(可以作为命令行安装)

测试如下:

chmod +x ./myscript.sh
./myscript.sh
Do you want to continue (y/n)? y
y
./myscript.sh
Do you want to continue (y/n)? n
n

while循环有2个结尾]]应该只有],此外还有空格,这一点非常重要:while[“$exitLoop”!=“y”]函数定义应该是函数ask_yes_或_no()。那工作。我决不会怀疑那些多余的空格会导致它出错。这是一种奇怪的语法。