%E2%80%9D%E9%99%84%E8%BF%91%E5%87%BA%E7%8F%BE%E8%AA%9E%E6%B3%95%E9%8C%AF%E8%AA%A4.png)
我創建了一個 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
你應該很安全。