2015-02-10 42 views
0

我希望能夠通過簡單地運行一個新的值作爲參數的腳本來更新數據庫字段。如何使用參數從bash腳本運行SQL更新字符串?

ie> ./update.sh newvalue

,並把它與 「NEWVALUE」 更新小區運行SQL。

目前我打開數據庫連接,並在此SQL執行更新粘貼。

UPDATE modules_config_x_roomtypes SET value = 'newvalue' WHERE modules_config_id = (SELECT id FROM modules_config WHERE module_id = (SELECT id FROM modules WHERE name = 'system') AND name = 'theme'); 
+0

您是否檢查過'psql'的Postgres文檔?在這裏:HTTP://www.postgresql.org/docs/current/static/app-psql.html – 2015-02-10 18:06:47

回答

3

像這樣簡單的事情似乎會起作用,除非我誤解了需求。注意我沒有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.

+0

真棒謝謝@zzevannn,這個偉大的工作用psql,我剛添加的數據庫信息,以結束 '回聲「 $ SQL「| psql wrkdb -U postgres' – Drew 2015-02-11 16:46:55

+0

很高興幫助=) – zzevannn 2015-02-11 18:51:17