Mysql 如果在bash的循环中
这应该是一个非常简单的问题,但我对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发送一个查询,这样我就可以在行中获得
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
-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