【问题标题】:Bash script with variable from a different file in array具有来自数组中不同文件的变量的 Bash 脚本
【发布时间】:2017-12-26 01:16:39
【问题描述】:

我有一个config.txt 文件,其中包含以下内容:

VAR=('a' 'b' 'c')
database='mydb'

并且我想在脚本 (myscript.sh) 中使用 VAR 变量来检查其中的任何数据是否存在于将对数据库进行的搜索中。

我正在做的搜索是这样的:

output=$(mysql $database -u $user -p$pass -se "select name from my_table where word = '$VAR'")

【问题讨论】:

  • 您将VAR 定义为一个数组,但将其用作“标量”。您想在该 select 语句中使用什么实际值?你想遍历数组吗?
  • 我想在数据库中搜索存储在变量 VAR 中的每一个数据。其中一个应该返回一个结果。

标签: mysql bash variables


【解决方案1】:

您可以使用source 命令(简称为.)将文件读入脚本,如下所示:

. config.txt
# or
source config.txt

要获取逗号分隔的字符串,请检查例如here

【讨论】:

  • 那行不通;从它的使用来看,VAR 应该是一个 shell 数组。
  • VAR 应该有多个数据,因此是一个数组,我想用它来搜索数据库中的每一个。我该怎么做?
【解决方案2】:

扩展@Olli 的回答:

source config.txt

# SQL injection
# values=$(printf "'%s'\n" "${VAR[@]}" | paste -sd,)
values=$(printf "'%s'\n" "${VAR[@]//\'/\'\'}" | paste -sd,)

select="select name from my_table where word in ($values)"
output=$(mysql "$database" -u "$user" -p"$pass" -se "$select")

【讨论】:

  • 每次我在脚本中使用 source 我得到:第 19 行:mysql:找不到命令第 21 行:ls:找不到命令
  • 听起来您需要单独提出一个问题,并且您必须显示代码。
  • 我创建了一个脚本来测试你的解决方案,我唯一有的就是开头的#!/bin/sh,其余的和你上面写的一样。我得到 GNU 就是因为这个?
  • 因为什么?我不明白你的问题。
猜你喜欢
  • 2020-05-04
  • 1970-01-01
  • 2021-10-08
  • 2022-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
  • 1970-01-01
相关资源
最近更新 更多