Shell

Bash:意外標記’)‘附近的語法錯誤

  • December 15, 2016

我創建了一個使用儲存在配置文件中的資訊的 shell 腳本。我面臨的問題是,當我嘗試傳遞儲存在配置文件中的某些值以供 shell 腳本使用時,出現語法錯誤。

例如:

配置文件

host=localhost
user=user
password=GhR6R3#h]dSq+C74)Jz9CDF6a7^&L[4= (not my real password)
db_name=database

script.sh

# 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用引號括起來,當它不起作用時,我對儲存在配置文件中的實際密碼做了同樣的事情,但我還是沒有成功。

解決這個問題的最佳方法是什麼?

盡可能多地使用雙引號。

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

你應該是安全的。

引用自:https://unix.stackexchange.com/questions/330557