检查bash脚本中是不是存在mysql用户,出现错误

Posted

技术标签:

【中文标题】检查bash脚本中是不是存在mysql用户,出现错误【英文标题】:Check if mysql user exists in bash script, getting error检查bash脚本中是否存在mysql用户,出现错误 【发布时间】:2015-04-16 15:09:14 【问题描述】:

我正在编写一个 bash 脚本来检查 mysql 用户是否存在,使用以下命令:

checkuser=`mysql -u $mysqlroot -p$rootpw -e "SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = '$user_name') ;"`
lastchr=$checkuser#$checkuser%?
if [ $lastchr == 1 ] ; then
      clear
      echo "ERROR: mysql user exists"
fi

我的问题是,终端总是给我以下反馈:

/etc/hosting: line 775: syntax error near unexpected token `('
/etc/hosting: line 775: `checkuser=`mysql -u $mysqlroot -p$rootpw -e "SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = '$user_name') ;"`'

我尝试转义“(”和“)”,但没有成功。

我做错了什么?我尝试了所有不同类型的转义、单引号……但没有帮助。

亲切的问候

编辑: 因为可能需要,前几行:

echo "creating mysql user ..."
echo ""
read -p "enter username: " user_name

if [[ -z "$user_name" ]] ; then
      clear
      echo "username mustn't be empty!"
      create_mysql_user    # calls function again
fi

# check username length
if [ $#my_user -gt 16 ] ; then
      clear
      echo "ERROR: the username mustn't be longer than 16 characters"
      create_mysql_user
fi

【问题讨论】:

前面几行是什么? 我可以在 bash 和 /bin/sh 中执行你的 checkuser-command - 两者都没有错误。你的密码中是否可能有一个“(”?(但即使这样它也可以在我的机器上运行)。你的 shebang 看起来如何?“#!/bin/bash”?或“#!/bin/sh”?尝试调用你的脚本带有“bash /etc/hosting”。 set -x 会告诉你你做错了什么。您将能够准确地看到正在运行的内容。 $(mysql ... ;")替换反引号,这将使进一步的调试和转义更容易 你正在混合 my_user 和 user_name 【参考方案1】:

这是一个老问题,但仍然可以在互联网上搜索。我想回答它,因为它没有正确的答案。

要使用bash检查mysql用户是否存在,可以使用以下包jq将查询结果转换为数组格式的用户列表的可读输出:

 # Get list of all sql users
 sql_users=$(mysql -e "SELECT USER FROM mysql.user;" | jq -rR .)


 check_sql_user=$(echo "$sql_users" | grep "username_to_check")

 if [[ -z "$check_sql_user" ]]; then

  echo "No user found"
  # Call create user here
 else
  echo "User found"

 fi

【讨论】:

以上是关于检查bash脚本中是不是存在mysql用户,出现错误的主要内容,如果未能解决你的问题,请参考以下文章

检查 Bash shell 脚本中是不是存在输入参数

使用if else bash脚本检查变量是不是存在[重复]

检查bash中是不是存在程序

求Bash Shell脚本,判定文件是不是存在。

检查是不是在 bash 脚本中保留了 shift

如何使用 shell 脚本检查 MySQL 数据库中是不是存在表?