检查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用户,出现错误的主要内容,如果未能解决你的问题,请参考以下文章