像這樣簡單的事情似乎會起作用,除非我誤解了需求。注意我沒有psql,所以不能給你一個確切的解決方案,而是一個指南。
#!/bin/bash
if [ $# -lt 1 ]
then
echo "USAGE: ./update.sh [newvalue]"
echo " [newvalue] represents the new value to insert into the DB."
exit
fi
NEWVAL=$(echo $1 | sed "s/'/\\\'/g")
SQL="UPDATE modules_config_x_roomtypes SET value = '"$NEWVAL"' WHERE modules_config_id = (SELECT id FROM modules_config WHERE module_id = (SELECT id FROM modules WHERE name = 'system') AND name = 'theme');"
echo "$SQL" | mysql --user=user --password=password
這首先確保你有一個說法,然後逃脫它的任何單引號,因此不破的SQL語句,然後回顯是在SQL到MySQL。您必須修改用戶並按要求傳遞或從其他文件中獲取源代碼。
如果您需要插入一張空白的「」將工作作爲ARG但這並不處理空。
你可能還需要添加一個檢查sql語句退出代碼,以確保更新了乾淨。這只是一個簡單的如果是$ ?,但由於這不完全在問題的上下文中,我將其留作練習來完成。
我沒有運行psql,所以我不能說確切的參數需要這個工作在那裏,但從手冊頁你可以給選項-c指定一個命令來運行,所以你可能會用這個替換回聲給mysql,你也必須處理讓腳本連接到數據庫,但是這裏有很多Q.
您是否檢查過'psql'的Postgres文檔?在這裏:HTTP://www.postgresql.org/docs/current/static/app-psql.html – 2015-02-10 18:06:47