2013-06-18 88 views
0

我得到這個意外的「完成」標記錯誤意外令牌「完成」的錯誤在for循環shell腳本

echo -e "Enter the file stem name" 
read filestem 
for i in {1..22} 
do 
    `java -cp /export/home/alun/jpsgcs/ CMorgansToTheta $filestem_$i.INPUT.par $filestem_$i.THETA.par` 
done 
+0

您是否嘗試在腳本的頂部添加'#!/ bin/bash'標頭? –

+5

爲什麼在反引號中有'java -cp ..'?沒有任何意義,除非你將java命令輸出到某個變量。 – 2013-06-18 17:21:44

+2

或刪除反引號?該java程序是否真的返回可執行'bash'語句? –

回答

1

在你的Java命令行:

java -cp /export/home/alun/jpsgcs/ CMorgansToTheta $filestem_$i.INPUT.par $filestem_$i.THETA.par 

您正在使用:

$filestem_$i 

這將是相當於:

${filestem_}${i} 

,因爲下劃線_不被視爲shell中的字邊界,整個filestem_將被視爲變量名稱。最有可能你應該使用:

${filestem}_${i} 

你能告訴我這個腳本的輸出?

#!/bin/bash 
set -x 
echo -e "Enter the file stem name" 
read filestem 
for i in {1..3} 
do 
    echo "java -cp /export/home/alun/jpsgcs/ CMorgansToTheta ${filestem}_${i}.INPUT.par ${filestem}_${i}.THETA.par" 
done 
+0

現在我得到了意外的文件錯誤結束 – Vignesh

+0

在Java命令之前,你還有沒有報價嗎? – anubhava

+0

nope。我拿走了他們 – Vignesh

5

如果Java程序沒有寫入到輸出,你for循環相當於(因爲反引號的)到

for i in {1..22} 
do 
done 

它會產生你看到的錯誤。很可能你只是想刪除反引號來運行程序22時間:

echo -e "Enter the file stem name" 
read filestem 
for i in {1..22} 
do 
    java -cp /export/home/alun/jpsgcs/ CMorgansToTheta "${filestem}_$i.INPUT.par" "${filestem}_$i.THETA.par" 
done 
+0

我試過這個,現在我得到意外的文件錯誤結束 – Vignesh

+0

從shell腳本或從Java程序?我在shell腳本中修復了一個小錯誤,它會將錯誤的文件名傳遞給Java程序。 – chepner

+0

文件錯誤的意外結束來自腳本。不是java程序 – Vignesh

相關問題