簡體   English   中英

通過bash使用路徑作為參數調用Shell腳本

[英]Calling shell script via bash using a path as an argument

我正在嘗試通過bash執行shell腳本,同時還嘗試傳遞所述腳本的參數。

到目前為止,我對此從未遇到過任何問題,像/opt/scripts/start_import.sh user pass "Some name with spaces"命令/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 /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

我懷疑傳遞路徑(/ opt / subfolder / 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

這是無效的:

if $1=""

您需要使用test命令比較變量。 還要密切注意空白:

if test "$1" = "" ;

這也可以更簡短地寫為

if test -z "$1" ;

您可能需要提供該行代碼中正在發生的事情,但是據我所知,您正在嘗試在腳本中執行以下操作:

some/path=$1

你不能那樣做。 “ /”是一個特殊字符,不能成為bash var名稱的一部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM