Mysql 如果在bash的循环中

Mysql 如果在bash的循环中,mysql,bash,Mysql,Bash,这应该是一个非常简单的问题,但我对bash不是很熟悉,我花了很长的时间才弄明白 declare -a ids=( 1 2 3 ) for i in "${ids[@]}"; do re= $(mysql -h .... "SELECT col_A FROM DBA WHERE id=$i") if [ $re -eq 0 ]; then echo sucess fi done 这是我正在尝试做的一个例子,我有一个id数组,我想向我的db发送一个查询,这样我就可以在行中获得

这应该是一个非常简单的问题,但我对bash不是很熟悉,我花了很长的时间才弄明白

declare -a ids=( 1 2 3 )
for i in "${ids[@]}";
do
  re= $(mysql -h .... "SELECT col_A FROM DBA WHERE id=$i")
  if [ $re -eq 0 ]; then
     echo sucess
  fi
done
这是我正在尝试做的一个例子,我有一个id数组,我想向我的db发送一个查询,这样我就可以在行中获得一个带有特定id的标志,然后根据它做一些事情。但我不断收到意外的令牌错误,我不完全确定原因


编辑:在复制代码和删除一些私人信息时,我以某种方式删除了,然后,它出现在我测试的代码中。

根据您描述的内容和部分脚本,我不确定我是否能够完全创建您尝试执行的操作,但是您遇到的令牌错误消息通常与
bash
将空白作为分隔符处理的方式有关。基于您发布的内容的一些评论:

  • 在声明变量时,需要删除等号周围的空格,因此需要删除
    re=
    中等号后面的空格
  • 因为
    bash
    will对空格敏感,所以需要引用可能包含空格的变量声明。为了安全起见,引号需要在子shell周围
    $()
  • 您在
    if
    语句中缺少
    then
  • 必须引用测试括号中的变量,即单个[]s,这一点很重要。使用带有
    -eq
    的不带引号的字符串,或者在测试括号内仅使用不带引号的字符串通常是有效的,但是,这是一种不安全的做法,可能会产生不可预测的结果
  • 因此,考虑到注意到的项目,更新后的脚本将类似于:

    declare -a ids=( 1 2 3 )
    for i in "${ids[@]}";
    do
      re="$(mysql -h .... "SELECT col_A FROM DBA WHERE id=$i")"
      if [ "$re" -eq "0" ]; then
         echo "success"
      fi
    done
    
    你能试着把上面提到的编辑工作到你的脚本中,看看你能不能让它工作?请记住,如果您使用类似这样的网站来了解更多关于
    bash
    语法的潜在缺陷或独特性,这将对您有所帮助。这将有助于确保您正朝着满足特定需求的解决方案努力,而不是被一些棘手的语法所束缚

    完成这些编辑后,您能汇报您的经验吗

    编辑

    根据您的评论,很有可能您没有使用bash运行脚本,尽管包含
    #/bin/bash
    位于脚本顶部。当您以
    sh scriptname.sh
    的形式运行脚本时,您正在强制脚本由
    sh
    而不是
    bash
    运行。尝试像这样运行脚本
    /bin/bash scriptname.sh
    ,然后报告您的体验


    有关各种
    shell
    s之间差异的更多信息,请参阅if语句的问题在于您没有
    then
    关键字。一个简单的解决方案是:

    declare -a ids=( 1 2 3 )
    for i in "${ids[@]}";
    do
        re= $(mysql -h .... "SELECT col_A FROM DBA WHERE id=$i")
        if [ $re -eq 0 ]; then
           echo sucess
        fi
           done
    

    此外,这里还有一个关于bash中if语句的好例子

    删除
    re=$
    中的空格循环显然是不相关的。另外,
    then
    在哪里?正如您可能已经注意到的,您的问题得到了反对票。这主要是因为您的问题标题与您的问题不完全匹配。您可能应该将问题标题修改为类似“Bash语法和意外标记错误”。另外,人们希望你在发帖之前做更多的研究和工作。在将来,我建议在发布之前使用帮助您对shell脚本执行基本检查。进行了这些更改后,仍然获得了意外的sintax令牌。此外,ShellCheck表示一切正常。根据您的说法,很难为您解决此问题。我认为您的脚本中的其他地方一定有错误,或者您正在使用另一个
    shell
    ,而不是
    bash
    。以下几点可能对您有所帮助:您是如何运行脚本的?你有
    #吗/bin/bash
    在脚本的顶部?您现在运行脚本时遇到的确切错误是什么?我正在运行,通过调用“sh filename.sh”在我的unix终端上运行脚本,我确实有#/bin/bash,确切的错误是“意外的sintax标记`do”,那么您可能没有使用bash来运行脚本。尝试
    /bin/bash filename.sh