我创建了一个 shell 脚本,它使用配置文件中存储的信息。我面临的问题是,当我尝试传递配置文件中存储的某些值以供 shell 脚本使用时,出现语法错误。
例如:
配置文件
host=localhost
user=user
password=GhR6R3#h]dSq+C74)Jz9CDF6a7^&L[4= (not my real password)
db_name=database
脚本文件
# Load config file TODO: make this more secure
source /path/to/config.conf
# MySQL database dump
mysqldump --lock-tables -h $host -u $user -p $password $db_name > dbbackup_`date +"%Y%m%d"`.bak
这是我尝试运行脚本时发生的情况:
$ bash script.sh
Syntax error near unexpected token `)'
`password=GhR6R3#h]dSq+C74)Jz9CDF6a7^&L[4='
该问题似乎与我随机生成的密码中使用的某些字符有关。我尝试用$password
引号引起来,当这不起作用时,我对配置文件中存储的实际密码做了同样的事情,但我再次没有成功。
解决这个问题的最佳方法是什么?
答案1
尽可能多地使用双引号。
config.conf 应该是这样的
host="localhost"
user="user"
password="GhR6R3#h]dSq+C74)Jz9CDF6a7^&L[4="
db_name="database"
还有你的命令:
mysqldump --lock-tables -h "${host}" -u "${user}" -p"${password}" "${db_name}" > dbbackup_`date +"%Y%m%d"`.bak
你应该很安全。