自动处理特殊字符

问题描述:

我有一个非常简单的Bash脚本。自动处理特殊字符

#!/bin/bash 

mysql_user=$1 
mysql_password=$2 
mysql_database=$3 

mysql -u root -pxxxxxxxxx -e "create database $mysql_database;grant usage on *.* to '$mysql_user'@'%' identified by '$mysql_password';grant all privileges on $mysql_database.* to '$mysql_user'@'%';FLUSH PRIVILEGES;" 

现在,这个脚本在其简单的作品完美。

但是我现在遇到的问题是,如果我使用密码,其中的任何软件有$签名,整个脚本将失败。

如何修改我的脚本,当它被检测到时自动在其前面添加一个\

+0

你的意思是mysql_password或-pxxxxxxx一个?另外,描述脚本如何失败。 – choroba 2014-09-29 13:00:32

+0

可能会调用与单引号括起来的密码参数脚本应该工作。例如,'script.sh user'传递'data' – Fazlin 2014-09-29 13:06:04

+0

如果你没有验证传递给'mysql'的字符串中使用的值,那么你正打开自己的SQL注入攻击。 – chepner 2014-09-29 13:09:46

你有没有使用sed做必要的转义认为:

mysql_password=$(echo $2 | sed 's/\$/\\$/g') 

然后用它喜欢:

mysql -u root -p$mysql_password -e ....... 
+0

我试过这个,但是很遗憾没有帮我创建一个演示脚本来测试它##/ bin/bash password = $(echo $ 1 | sed's/\ $/\\ $/g') 回声“$密码” ' 当我运行./script.sh pa $$字时,我得到以下输出pa10656word – edalb1979 2014-09-29 13:52:08

+0

不幸的是'$$'代表当前shell的PID,并且echo命令导致问题。让我检查我是否能找到治疗方法。 – blackSmith 2014-09-29 13:55:29

+0

它并不总是$$,但是我写的系统是客户可以选择密码的地方。对于那里的MySQL。 – edalb1979 2014-09-29 14:15:44