【问题标题】:Shell Script – Get Extract value from mysql show variablesShell 脚本 - 从 mysql 显示变量中获取提取值
【发布时间】:2020-09-05 17:30:06
【问题描述】:

我想使用 shell 脚本获得一个值形式的显示变量查询。这是我使用的命令。

data=$(mysql -u root -proot -t -e "show variables where variable_name = 'datadir';"  -B --skip-column-names)

输出结果是,

+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+

所以我只想获得价值。

/var/lib/mysql/

这是我尝试的脚本,

data=$(mysql -u root -proot -t -e "show variables where variable_name = 'datadir';"  -B --skip-column-names)
data2=$(echo $data | tr "+---------+-----------------+" "\n")
data3=$(echo $data2 | tr "|" "\n")
data4=$(echo $data3 | tr "datadir " "\n")
echo $data4 

它返回“/v /l b/mysql/”。

【问题讨论】:

  • 与其摆弄shell来摆脱边界,我宁愿让MySQL一开始就不打印它们。
  • 去掉-t 选项。它覆盖了-B,所以你得到了边框。
  • 感谢边框已移除。但是如何从结果中删除“datadir”。

标签: mysql bash shell


【解决方案1】:

首先,不要同时使用-t-B 选项(此外,更喜欢--batch 而不是-B,因为-B 已被弃用(请参阅Get the sql query result without the table format)。

接下来,tr 仅用于替换单个字符。如果要替换更多字符,可以使用sed 或只使用 Bash。如果你想要字符串中的第二个单词,你可以使用cut

纯重击

data=$(mysql -u root -proot -e "show variables where variable_name = 'datadir';"  --batch --skip-column-names)
echo "${data//datadir/}"

sed

data=$(mysql -u root -proot -e "show variables where variable_name = 'datadir';"  --batch --skip-column-names)
sed 's/datadir//g' <<< "$data"

剪切

data=$(mysql -u root -proot -e "show variables where variable_name = 'datadir';"  --batch --skip-column-names)
cut -d' ' -f2 <<< "$data"

【讨论】:

    猜你喜欢
    • 2013-06-15
    • 2021-10-23
    • 2022-11-05
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 2013-03-25
    • 2015-05-27
    相关资源
    最近更新 更多