2015-10-28 45 views
-2

希望有人可以幫我用這個bash腳本,我試圖在CentOS機器上運行。我在FreeBSD上寫了一個腳本這樣Centos Bash腳本與Postrgres數據庫

#!/bin/sh 
setenv code1 "grant select on " 
setenv code2 " to testusr" 

echo setting read only access 
foreach table (table1 table2 table3) 
    psql -c "psql -d databasename -c '$code1$table$code2'" 
end 
echo finished 

後來我改成下面的,但沒有奏效。它抱怨的最後第三行(sudo su postgres)有人可以幫忙嗎?

#!/bin/bash 
set env code1 "grant select on " 
set env code2 " to testusr" 

echo setting read only access 
for table in 'table1 table2 table3' 
    sudo su postgres -c "psql -d databasename -c '$code1$table$code2'" 
do; 
echo finished 

任何幫助將不勝感激。

+0

你的問題到底是什麼? – NoChinDeluxe

+0

儘管有'/ bin/sh' shebang行,第一個腳本看起來像'csh'。 – tripleee

回答

-1

的語法是錯誤的,請嘗試:

#!/bin/bash 
code1="grant select on" 
code2="to testusr" 

echo "setting read only access" 
for table in 'table1 table2 table3' 
    su postgres -c "psql -d databasename -c $table" 
do; 
echo "finished" 
+0

謝謝。它再次給我語法錯誤:語法錯誤附近意外的標記'蘇' ./test.sh:第16行:'su postgres -c「psql -d databasename'$ code1 $ table $ code2'」' –

+0

固定:)現在看到 – Douglas

+0

你沒有在任何地方使用'code1'或'code2'。 – chepner

0

除了幾處語法錯誤,你也應該使用sudo運行psql。除此之外,它減少了嵌套引用的數量,因爲您不再需要將單個字符串中的整個psql命令作爲su-c選項的參數。

#!/bin/bash 
code1="grant select on " 
code2=" to testusr" 

echo setting read only access 
for table in table1 table2 table3; do 
    sudo -u postgres psql -d databasename -c "$code1 $table $code2" 
done 
echo finished 
+0

我仍然收到錯誤./test.sh:第8行:語法錯誤附近的意外令牌'源'table1 table2 table3 –

+1

您是否正在運行上面的代碼?我根本沒有使用「源代碼」這個詞,所以我沒有看到你如何從我的代碼中得到這個錯誤。 – chepner

+0

它很好用。那是我的錯誤,你是對的。非常感謝您的幫助 :) –