2013-02-28 38 views
0
#!/bin/bash 
value=$(</var/www/sym_monitor/man_mon.txt) 
value2=$(</var/www/sym_monitor/panel_mon.txt) 

pro=$(ps -ef |grep sym |grep -v grep |awk '{ print $2 }') 
echo "$pro"; 
echo "STARTED"; 

if [ "$value" == "false" ]; then 


cd /var/www/symmetric-ds-3.1.6/bin; 
sleep 30; 
(sudo ./sym --port 8082 --server); 
#(sudo /bin/bash /var/www/symmetric-ds-3.1.6/bin/sym --port 8082 --server); 

echo "IF"; 


else 
if [ "$value2" == "false" ]; then 


cd /var/www/symmetric-ds-3.1.6/bin; 
sleep 30; 
(sudo ./sym --port 8082 --server); 
#(sudo /bin/bash /var/www/symmetric-ds-3.1.6/bin/sym --port 8082 --server); 
echo "ELSEIF"; 

else 
if[ "$pro" == "" ]; then 

echo "pro"; 
cd /var/www/symmetric-ds-3.1.6/bin; 
sleep 30; 
(sudo ./sym --port 8082 --server); 
fi 
fi 
fi 


echo "END"; 

在上面的腳本中最後一個else if給出語法錯誤。任何想法?在變量$ pro中,即使沒有運行某個進程ID的進程正在打印?爲什麼?否則,如果在bash腳本中發生錯誤

之前,該腳本看起來像下面,並工作絕對好。

#!/bin/bash 
    value=$(</var/www/sym_monitor/man_mon.txt) 
    value2=$(</var/www/sym_monitor/panel_mon.txt) 

if [ "$value" == "false" ]; then 

    cd /var/www/symmetric-ds-3.1.6/bin; 
    sleep 30; 
    (sudo ./sym --port 8082 --server); 
    #(sudo /bin/bash /var/www/symmetric-ds-3.1.6/bin/sym --port 8082 --server); 


    elif [ "$value2" == "false" ]; then 

    cd /var/www/symmetric-ds-3.1.6/bin; 
    sleep 30; 
    (sudo ./sym --port 8082 --server); 
    #(sudo /bin/bash /var/www/symmetric-ds-3.1.6/bin/sym --port 8082 --server); 

    fi 

這是工作絕對好的電影劇本的第一個版本。但是我必須再添加一個條件,就是說,如果沒有進程運行,如上面第一個腳本中提到的那樣,那麼代碼應該運行。我不知道爲什麼即使沒有流程運行,它也會給$ pro值賦予一些數字。任何想法?

+0

什麼是錯誤? – FatalError 2013-02-28 05:10:43

+0

嘗試糾正縮進的空間。它可能在執行此操作時會發現錯誤 – hek2mgl 2013-02-28 05:11:13

+0

除了實際的錯誤之外,還有一些樣式更正:不要在shell腳本的行尾使用';'而使用'elif'而不是'else if'(還有刪除額外的''fi's)。還有,你是否有任何理由在subhells(帶圓括號)運行'sudo'命令? – 2013-02-28 06:14:09

回答

7

應該有間「如果和‘[’類似if [。(檢查線31號)
爲了避免這種錯誤讀取man bash