Linux 备份MySQL数据库的Bash脚本

Linux 备份MySQL数据库的Bash脚本,linux,bash,shell,Linux,Bash,Shell,我写了一个脚本,我不断得到以下错误。尝试连接时拒绝用户“zul@”localhost(使用密码:是)的访问 项目:43:[d:未找到 项目:43:[d:未找到 它没有读取输入数据,也没有连接到MySQL。有什么想法吗 这是我的剧本: #!/bin/bash tstamp=$(date +$s) #Dump or Update if [ -z "$1" ]; then echo -n "What do you want to do? [D]ump or [U]pdate: " rea

我写了一个脚本,我不断得到以下错误。尝试连接时拒绝用户“zul@”localhost(使用密码:是)的访问

项目:43:[d:未找到

项目:43:[d:未找到

它没有读取输入数据,也没有连接到MySQL。有什么想法吗

这是我的剧本:

#!/bin/bash

tstamp=$(date +$s) 

#Dump or Update
if [ -z "$1" ]; then
  echo -n "What do you want to do? [D]ump or [U]pdate: "
  read parm
else
  parm=$1
fi

#Database Name
if [ -z "$2" ]; then
  echo -n "What database are you using?"
  read dbname
else
  dbname=$2
fi

#Database User
if [ -z "$3" ]; then
  echo -n "What database user are you using?"
  read dbuser
else
  dbuser=$3
fi

#Database Password
if [ -z "$4" ]; then
     echo -n "What password are you using?"
     read dbpass
else
     dbpass=$4
fi


#Checks if the directory exists
if test ! -d "/home/zul/sql/backup"; then
  mkdir /home/zul/sql
  mkdir /home/zul/sql/backup
fi

mysqldump $dbuser -p$dbpass $dbname > /home/zul/sql/backup/$tstamp.$dbname.sql

if [$parm = d ]; then
  mysqldump $dbuser -p$dbpass $dbname > /home/zul/sql/backup/$dbname.sql
elif [$parm = u ]; then
  mysqldump $dbuser -p$dbpass $dbname < /home/zul/sql/backup/$dbname.sql
else
  echo " d or u option only! (lower case)"
fi
!/bin/bash
tstamp=$(日期+s)
#转储或更新
如果[-z“$1”];则
echo-n“您想做什么?[D]ump或[U]pdate:”
阅读帕尔姆
其他的
每平方米=1美元
fi
#数据库名称
如果[-z“$2”];则
echo-n“您使用的是什么数据库?”
读取数据库名
其他的
dbname=$2
fi
#数据库用户
如果[-z“$3”];则
echo-n“您正在使用哪个数据库用户?”
读取数据库用户
其他的
dbuser=$3
fi
#数据库密码
如果[-z“$4”];则
echo-n“您使用的密码是什么?”
读取dbpass
其他的
dbpass=$4
fi
#检查目录是否存在
如果测试!-d“/home/zul/sql/backup”,则
mkdir/home/zul/sql
mkdir/home/zul/sql/backup
fi
mysqldump$dbuser-p$dbpass$dbname>/home/zul/sql/backup/$tstamp.$dbname.sql
如果[$parm=d];则
mysqldump$dbuser-p$dbpass$dbname>/home/zul/sql/backup/$dbname.sql
elif[$parm=u];然后
mysqldump$dbuser-p$dbpass$dbname
我猜if-else测试中缺少一个空格:
应该是
[test]
而不是
[test]

if [ $parm = d ]; then
  mysqldump $dbuser -p$dbpass $dbname > /home/zul/sql/backup/$dbname.sql
elif [ $parm = u ]; then
  mysqldump $dbuser -p$dbpass $dbname < /home/zul/sql/backup/$dbname.sql
else
如果[$parm=d];那么
mysqldump$dbuser-p$dbpass$dbname>/home/zul/sql/backup/$dbname.sql
elif[$parm=u];然后
mysqldump$dbuser-p$dbpass$dbname
必须用空格将“[”与其参数分开:

if [ $parm = d ]; then
    mysqldump $dbuser -p$dbpass $dbname > /home/zul/sql/backup/$dbname.sql
elif [ $parm = u ]; then

这是因为它被解析为
[test
是一个命令(
[d:notfound
-意思是没有名为
[d
)的命令)谢谢,成功了。你知道为什么用户“zul”@“localhost”的访问被拒绝了吗?我输入了正确的密码,但仍然出现了错误。zul不允许从localhost进行连接。@KD:在你编写的脚本中没有设置
$dbpass
的代码posted@KD:你的脚本看起来没有问题。这不是本质上的问题吗只是构造一个命令行来调用mysqldump?我怀疑这样一个脚本的有用性。至少对我来说,这听起来像是又一件需要维护但没有多大好处的事情。你是否尝试使用
bash-vx
你的脚本运行?这很有帮助,会让你发现你的bug