2016-06-27 166 views
0

我試圖通過bash執行shell腳本,同時也試圖爲所述腳本傳遞參數。通過bash使用路徑作爲參數調用shell腳本

到目前爲止,我從來沒有遇到過這個問題,並且像/opt/scripts/start_import.sh user pass "Some name with spaces"這樣的命令總是執行得很好。三個參數傳遞得很好,可以在start_import腳本中使用。

今天我寫了一個新的腳本,我們稱之爲set_properties.sh。我像往常一樣執行命令/opt/scripts/set_properties.sh /opt/subfolder/subfolder user pass stringwithoutspaces stringwithoutspaces2

然而,這一次我收到轟炸與錯誤信息:

/opt/scripts/set_properties.sh: line 7: /opt/subfolder/subfolder=: No such file or directory 
/opt/scripts/set_properties.sh: line 13: user=: command not found 
/opt/scripts/set_properties.sh: line 19: pass=: command not found 
/opt/scripts/set_properties.sh: line 56: syntax error: unexpected end of file 

我懷疑,傳遞路徑(/選擇/子文件夾/ subolder)作爲參數導致此錯誤。然而,我還沒有找到這個解決方案呢...

我猜shell是試圖評估路徑,而不是隻是作爲參數傳遞它。我嘗試用雙引號括住路徑,它應該停止對封閉字符串的任何評估,但沒有運氣。

我在做什麼錯?調用腳本時是否有任何解決方案將路徑作爲參數傳遞?提前致謝!


編輯:set_properties.sh的內容:

set +v 

error_txt="" 
ret_code="0" 

#check input parameters 
if $1="" 
then 
     error_txt="Invalid parameter for 'XXXX'." 
     ret_code="1" 
fi 

if $2="" 
then 
     error_txt="Invalid parameter for 'XXXX'." 
     ret_code="1" 
fi 

if $3="" 
then 
     error_txt="Invalid parameter for 'XXXX'." 
     ret_code="1" 
fi 

if $4="" 
then 
     error_txt="Invalid parameter for 'XXXX'." 
     ret_code="1" 

if $5="" 
then 
     error_txt="Invalid parameter for 'XXXX'." 
     ret_code="1" 
fi 

# create new .properties based on input parameters 
echo "################################################################################" > $1/subfolder1/subfolder2/my_property_file.properties 
echo "#xxxxyyyyzzzz" >> $1/subfolder1/subfolder2/my_property_file.properties 
echo "#created automatically by xxxx processing on `date`" >> $1/subfolder1/subfolder2/my_property_file.properties 
echo "#xxxxyyyyzzzz" >> $1/subfolder1/subfolder2/my_property_file.properties 
echo "propertyName=^$4" >> $1/subfolder1/subfolder2/my_property_file.properties 
echo "#xxxxyyyyzzzz" >> $1/subfolder1/subfolder2/my_property_file.properties 
echo "propertyName=$2" >> $1/subfolder1/subfolder2/my_property_file.properties 
echo "#xxxxyyyyzzzz" >> $1/subfolder1/subfolder2/my_property_file.properties 
echo "propertyName=$3" >> $1/subfolder1/subfolder2/my_property_file.properties 
echo "#xxxxyyyyzzzz" >> $1/subfolder1/subfolder2/my_property_file.properties 
echo "propertyName=$5" >> $1/subfolder1/subfolder2/my_property_file.properties 
echo "#xxxxyyyyzzzz" >> $1/subfolder1/subfolder2/my_property_file.properties 
echo "propertyName=N" >> $1/subfolder1/subfolder2/my_property_file.properties 
echo "################################################################################" >> $1/subfolder1/subfolder2/my_property_file.properties 

ret_code=$? 

echo $error_txt 
exit $ret_code 
+0

寫你能提供你的腳本內容? – xurei

+0

修復你的if-tests如果[「x {$ 1}」-eq'x'];然後' –

+0

用參數的路徑引用換行 – lulyon

回答

2

這是無效的:

if $1="" 

您需要使用test命令來比較變量。狠抓空白,以及:

if test "$1" = "" ; 

這也可以更簡單地爲

if test -z "$1" ; 
+0

修復它,謝謝。奇怪的是我使用了相同的if-tests在我的其他腳本中運行良好,但我只是用test -z命令替換它 – daZza

0

您可能需要提供什麼在該行上的代碼發生的事情,但我可以告訴你正在嘗試做這樣的事情這在你的腳本中:

some/path=$1 

你不能這樣做。 「/」是一個特殊字符,不能成爲bash var名稱的一部分。

+0

我的不好,我認爲這完全是一個腳本調用的問題,而不是腳本本身。我會在幾分鐘內更新OP。謝謝! – daZza