2016-07-07 21 views
0

寫幾個腳本我有一個腳本這是這樣的:腳本,在擊

for k in {1..100..1} 
do 
cat <<EOF> script${k}.sh 

    do some things 

    cat <<EOF> somefile 
    text 
    EOF 

    do some things 


EOF 
done 

所以,簡單地說,我想100個腳本,看起來像:

do some things 

    cat <<EOF> somefile 
    text 
    EOF 

    do some things 

的問題是,當我運行這個時,Bash將第一個EOF與第三個EOF關聯,並停止寫入,並開始嘗試運行下一個命令。

我該如何解決這個問題?

在此先感謝!

編輯:我糾正了Aaron指出的一個錯字。另外,我會擴大一點我原來的問題。按照Aaron的指示,我使用END作爲第一個和最後一個EOF。它工作正常,但我仍然有一些麻煩。作爲更具體的,我的代碼看起來是這樣的:

for k in {1..100..1} 
do 
cat <<END> script${k}.sh 

    mkdir folder${k} 
    cd folder${k} 

    cat <<EOF> somefile 
    text 
    EOF 

    for j in {1..80..1} 
    cat <<EOF> program${j} 
     text 
    EOF 

執行一些東西

END 
done 

我猜你看到的麻煩。現在代碼工作得很好。問題在於變量。在END之間的$ {k},在script${k}中未被更正,並被相應的數字替換!

感謝所有幫助:-)

+2

您不能縮進EOF,它不會被識別。 – choroba

+0

謝謝。我沒有縮進它。我只是在這裏寫了這樣的文章,所以你可以更清楚地閱讀它 – Qwertuy

回答

2

EOF可以是將在定界符的末尾找到任何記號,這樣你就可以使用外定界符另一個問題:

for k in {1..100..1} 
do 
cat <<END> script${1}.sh 
do some things 

cat <<EOF> somefile 
text 
EOF 

do some things 

END 
done 

一些其他注意事項:

  • 你不使用$k,所以你基本上覆蓋相同的文件100倍。你的意思是script${k}.sh而不是script${1}.sh

  • 創建100個版本的相同腳本似乎沒用,即使腳本的行爲取決於其名稱。難道你不能把參數傳遞給一個獨特的腳本嗎?

+0

感謝您的回答。是的,我的意思是$ {k},當然這是一個錯字。我現在要糾正它,謝謝。另外,每個腳本當然是不同的。我只是沒有寫出我的特定代碼的細節,因爲它們看起來並不相關 – Qwertuy

+0

即使它們不同,你也添加了一個對我來說似乎毫無用處的間接方法。除了生成腳本,然後執行所需腳本之外,您可以將作爲參數的「您需要的」作爲參數傳遞給唯一腳本,該腳本的行爲與您需要的腳本相同。 – Aaron

+0

亞倫,我不想只執行其中的一個。我需要全部運行它們 – Qwertuy