自动处理特殊字符
我有一个非常简单的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;"
现在,这个脚本在其简单的作品完美。
但是我现在遇到的问题是,如果我使用密码,其中的任何软件有$签名,整个脚本将失败。
如何修改我的脚本,当它被检测到时自动在其前面添加一个\?
你有没有使用sed
做必要的转义认为:
mysql_password=$(echo $2 | sed 's/\$/\\$/g')
然后用它喜欢:
mysql -u root -p$mysql_password -e .......
我试过这个,但是很遗憾没有帮我创建一个演示脚本来测试它##/ bin/bash password = $(echo $ 1 | sed's/\ $/\\ $/g') 回声“$密码” ' 当我运行./script.sh pa $$字时,我得到以下输出pa10656word – edalb1979 2014-09-29 13:52:08
不幸的是'$$'代表当前shell的PID,并且echo命令导致问题。让我检查我是否能找到治疗方法。 – blackSmith 2014-09-29 13:55:29
它并不总是$$,但是我写的系统是客户可以选择密码的地方。对于那里的MySQL。 – edalb1979 2014-09-29 14:15:44
你的意思是mysql_password或-pxxxxxxx一个?另外,描述脚本如何失败。 – choroba 2014-09-29 13:00:32
可能会调用与单引号括起来的密码参数脚本应该工作。例如,'script.sh user'传递'data' – Fazlin 2014-09-29 13:06:04
如果你没有验证传递给'mysql'的字符串中使用的值,那么你正打开自己的SQL注入攻击。 – chepner 2014-09-29 13:09:46