2013-12-23 61 views
0

下面我粘貼了我的代碼的一小部分,其中涵蓋了我所擁有的問題。我在Unix腳本中運行了三個for循環。第一個循環n僅運行整數值。第二個循環k也運行整數值,但我稍後更改爲kappa以表示所有值除以10,在這種情況下範圍是0:0.1:10定義具有預先指定的變量值的for循環

現在,我的問題涉及第三個循環。我是一個初學Unix編程的初學者,所以這可能是一個非常基本的問題,但我似乎無法弄清楚。假設第三個循環覆蓋一組預定義值,即p=[0 1/15 1/12 1/10 2/15 1/6 1/5 1/4 1/3]。我已經將jmax定義爲9,但我不知道如何將這些對應的p值設置爲此循環參數。基本上我只想設置一個數組來保存這些值然後賦值,任何人都可以請給我一些指導,告訴我怎麼做?

請注意:由於其他使用$j我必須保持for循環的開始不變!

代碼部分:

for ((n=0;n<${nmax};n++)); do # first loop 
     for ((k=0;k<${kmax};k++)); do # second loop 
      for ((j=0;j<${jmax};j++)); do # third loop 

       # specify you job ...... 
       kappa=$(echo "scale=10; ${k}/10" | bc -l) 

非常感謝!

回答

1

這是你將如何創建一個數組和循環遍歷它:

# create an array 
p=(0 1/15 1/12 1/10 2/15 1/6 1/5 1/4 1/3) 

# loop over the elements in the array 
for j in "${p[@]}"; do 
    echo "$j" 
done 

看看高級Bash腳本編程指南的Arrays章。

+0

我認爲這是回答什麼,我一直在尋找for,但現在我意識到我需要保持for循環的完整定義('for((j = 0; j <$ {jm​​ax}; j ++));')。我仍然可以在for循環之前定義p,但是您能否在答案中解釋如何在for循環中提取p的第一個值? – Fraukje

+0

好吧,我想我已經知道了我自己,所以說我必須使用'for((j = 0; j <$ {jm​​ax}; j ++));',我定義'p'你的答案,然後在for循環中,我可以使用'prob = $(echo $ {p [$ j]})''。你能否繼續這樣做,如果在你的答案中同意改變這一點?它可能會幫助別人! :) – Fraukje

0

如果沒有特別需要爲你的腳本一個數組,如果你的數組項不包含空格字符,還有一個更簡單的解決方案:

# Assign all values that should be looped over to a normal string variable, 
# with each value separated by a space 
p="0 1/15 1/12 1/10 2/15 1/6 1/5 1/4 1/3" 

# Loop over all values in p 
for value in p; do 
    # Access each value in p using $value 
done 
+0

爲了保持整個腳本儘可能一般我寧願@ dogbane的解決方案,但謝謝! – Fraukje